快排的主要思想就是:
1. 指定一个基准值(枢纽, 可以为第一个, 最后一个, 中值 或者 随即值)
2. 双向扫描, 发现高位有值小于基准值, 将高位值赋给低位, 并将低位加1; 发现低位值大于高位, 则将地位值赋给高位, 并将高位减1; 直到高低位重合。
3. 将基准值赋给当前低位或高位(重合了)。
4. 对当前低位或高位分开的两个子区间运用以上1到3步即可。
上代码:
1. 指定一个基准值(枢纽, 可以为第一个, 最后一个, 中值 或者 随即值)
2. 双向扫描, 发现高位有值小于基准值, 将高位值赋给低位, 并将低位加1; 发现低位值大于高位, 则将地位值赋给高位, 并将高位减1; 直到高低位重合。
3. 将基准值赋给当前低位或高位(重合了)。
4. 对当前低位或高位分开的两个子区间运用以上1到3步即可。
上代码:
private static void qsort(int[] source, int from, int to) { if (from < to) { int pivot = source[from]; int low = from, high = to; while (low < high) { while (low < high && source[high] >= pivot) high--; source[low] = source[high]; while (low < high && source[low] < pivot) low++; source[high] = source[low]; } source[low] = pivot; qsort(source, from, low - 1); qsort(source, low + 1, to); }}