数据结构之快速排序
2017-12-30 12:28
351 查看
数据结构之快速排序
算法原理快速排序(Quicksort)是对冒泡排序的一种改进。
快速排序由C. A. R. Hoare在1962年提出。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。
算法步骤
获得待排序数组a
选取一个合适的数字p(一般来说就选取数组或是子数组的第一个元素)作为排序基准
将待排序数组a中比基准p小的放在p的左边,比基准p大的放在p的右边 这里写图片描述
从第3步获得的两个子数组sub1跟sub2
判断sub1或sub2中是否只有一个元素,如果只有一个元素则返回此元素,否则就将sub1(或是sub2)代回到第1步中继续执行
具体过程可以参见下面的过程图
代码实现
private void sortCore(int[] array, int startIndex, int endIndex) { if (startIndex >= endIndex) { return; } int boundary = boundary(array, startIndex, endIndex); sortCore(array, startIndex, boundary - 1); sortCore(array, boundary + 1, endIndex); } private int boundary(int[] array, int startIndex, int endIndex) { int standard = array[startIndex]; // 定义标准 int leftIndex = startIndex; // 左指针 int< 4000 /span> rightIndex = endIndex; // 右指针 while(leftIndex < rightIndex) { while(leftIndex < rightIndex && array[rightIndex] >= standard) { rightIndex--; } array[leftIndex] = array[rightIndex]; while(leftIndex < rightIndex && array[leftIndex] <= standard) { leftIndex++; } array[rightIndex] = array[leftIndex]; } array[leftIndex] = standard; return leftIndex; }
时间复杂度
相关文章推荐
- 数据结构之快速排序
- 数据结构(Java 快速排序模拟)本代码重在学习数据结构思路,代码完整性欠缺,请见谅
- 数据结构实验之排序八:快速排序
- 数据结构之快速排序(三)
- 数据结构之快速排序
- 数据结构与算法之一快速排序
- 数据结构之-快速排序
- 数据结构与算法——冒泡排序、选择排序和快速排序
- 数据结构与算法问题 快速排序
- 数据结构算法之快速排序
- 算法与数据结构基础(四)高级排序算法2.快速排序
- 数据结构之快速排序
- 数据结构之——快速排序
- 数据结构与算法之--高级排序:shell排序和快速排序
- 【数据结构】快速排序
- 【数据结构与算法】内部排序之四:归并排序和快速排序(含完整源码)
- 【数据结构之排序5】快速排序
- 数据结构与算法-快速排序
- 数据结构与算法之快速排序