排序算法——快速排序

参考:http://blog.csdn.net/v_JULY_v/article/details/6116297

 

一、快速排序算法的基本特性
时间复杂度:O(n*lgn)
最坏:O(n^2)
空间复杂度:O(n*lgn)
不稳定。

快速排序时基于分治模式处理的,
对一个典型子数组A[p...r]排序的分治过程为三个步骤:
1.分解:
数组分为两个子数组
A[p ..q-1] <= A[q] <= A[q+1 ..r]
2.解决:递归,对子数组A[p ..q-1]和A[q+1 ..r]排序。
3.合并。

http://blog.csdn.net/einstein991225/article/details/7422556

int partition(int arr[], int left, int right)

{

      int i = left, j = right;

      int tmp;

      int pivot = arr[(left + right) / 2];

     

      while (i <= j) {

            while (arr[i] < pivot)

                  i++;

            while (arr[j] > pivot)

                  j--;

            if (i <= j) {

                  tmp = arr[i];

                  arr[i] = arr[j];

                  arr[j] = tmp;

                  i++;

                  j--;

            }

      };

     

      return i;

}

 

void quickSort(int arr[], int left, int right) {

      int index = partition(arr, left, right);

      if (left < index - 1)

            quickSort(arr, left, index - 1);

      if (index < right)

            quickSort(arr, index, right);

}
posted @ 2012-10-07 13:19  三块钱的其其  阅读(130)  评论(0编辑  收藏  举报