1,思想:快速排序算法通过避免不必要的比较操作来减少时间复杂度。同时不会增加空间复杂度。
2,实现方式:
1)通过选定一个数据项作为参照轴,从数据两端开始向中间扫描,把比轴小的数据项交换到低端,把比轴大的数据项交换到高端,直到低端指针与高端指针相遇时完成一次分割。此时轴会位于正确的序列位置上。
2)然后,对被轴分割的两个子序列使用相同的方式进行递归排序。
3,java代码实现:
package aglogim;
public class QuickSorter {
public static int[] quickSort(int[] array, int low, int high) {
if (low >= high) {
return array;// recusive end condition.
}
int pvIndex = partion(array, low, high);
quickSort(array, low, pvIndex - 1);
quickSort(array, pvIndex + 1, high);
return array;
}
private static int partion(int[] array, int l, int h) {
int low = l - 1;
int high = h;
int pivot = array[h];// 9
while (true) {
while (array[++low] < pivot) {
}
while (high > 0 && array[--high] > pivot) {
}
if (low >= high)
break;
else
swap(array, low, high);
}
swap(array, low, h);
return low;// pivot index.
}
private static void swap(int[] array, int low, int high) {
int temp = array[low];
array[low] = array[high];
array[high] = temp;
}
}
//第二种划分方式。
private static int partion2(int[] arr, int start, int end) {
int i = start, j = end;
int pv = arr[start];//89064
while (i<j) {
while (i<j && arr[j] >= pv) {
j--;
}
arr[i]=arr[j];
while (i<j&&arr[i] <= pv) {
i++;
}
arr[j]=arr[i];
}
arr[i]=pv;
return i;
}