快拍算法

来源:互联网 发布:数据库去掉重复行 编辑:程序博客网 时间:2024/04/26 17:33

在快速中采用了分治的策略,复杂度:O(nlogn)

1、选择一个比较值(pivot):.我们将中间元素的值作为数据比较值, 但它可以是任何值 (在排序值的范围内),即使它在数组中不存在。

2、分区:以这种方式重新排列元素, 即所有小于pivot的元素都将转到该数组的左部分,所有大于pivot的元素请转到该数组的右侧部分。

3、对两个部分进行递归快排算法



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

      int i = leftj = right;

      int tmp;

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

 

      /* partition */

      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--;

            }

      };

 

      /* recursion */

      if (left < j)

            quickSort(arrleftj);

      if (i < right)

            quickSort(arriright);

}



原创粉丝点击