快排

xiaoxiao2021-02-28  87

非稳定排序

时间复杂度 最差 :O(n^2)      最理想:O(nlog(n))

空间复杂度 最差: O(n)       最理想:O(logn)

快排思想:

采用一种算法将数据分成两部分,其中一部分的值比另一部分的值都要大,然后再分别对两部分采用相同的方法排序,如此递归便可实现所有数据的排序。 快排算法: (1)取一个参考值key,可以是第一个数据也可以是所有数据中间的那个数 (2)从左到右将比key值大的放到key值得右边,从右到左将别key小的放到key的左边,直到左右计数相等。 (3)对(2)中形成的两部分数据分别执行(1)(2)直到没有需要排序的数据 java实现: /** * 快排 * @param value * @param left * @param right * @return */ public static int[] fastSort(int[] value, int left, int right) { if (value.length < 0) { return null; } int oneTemp; if (right - left == 1) { if (value[right] < value[left]) { oneTemp = value[right]; value[right] = value[left]; value[left] = oneTemp; } return value; } int i = left; int j = right; int middle = value[(i + j) / 2 + 1]; do { while (value[i] < middle && i < right) i++; while (value[j] > middle && j > left) j--; if (i <= j) { int temp = value[i]; value[i] = value[j]; value[j] = temp; i++; j--; } } while (i <= j); if (i < right) { fastSort(value, i, right); } if (j > left) { fastSort(value, left, j); } return value; }
转载请注明原文地址: https://www.6miu.com/read-74159.html

最新回复(0)