在排序算法中,快速排序的速度首屈一指。其基本思想为:
- 将待排序的序列的最左边的值设为基准值。
- 将序列中比基准值小的数据放到基准值左边,比基准值大的数据放到基准值右边。
- 将左右两部分数据,分别执行第一步和第二步。直到待排序的序列个数为1时停止递归。
代码实现:
public static void quickSort(int[] values, int left, int right){
// 如果left不小于right,需要排序的序列只有一个元素,方法返回。
if(left >= right){
return;
}
// 设置最左边的元素为基准点:pivot
int pivot = values[left];
// 把需要排序的序列中比pivot大的数放到右边,比pivot小的数放到左边,pivot的下标位置为i
int i = left;
int j = right;
while (j>i){
while (values[j] >= pivot && j>i){
j--;
}
while (values[i] <= pivot && j>i){
i++;
}
if(j>i){
int temp = values[i];
values[i] = values[j];
values[j]= temp;
}
}
values[left] = values[i];
values[i] = pivot;
//对序列中i左边的元素快排
quickSort(values,left,i-1);
//对序列中i右边的元素快排
quickSort(values,i+1,right);
}
快速排序的时间复杂度为O(NlogN) 。