快速排序是一种优雅的排序算法。使用分而治之的策略,divide and conquer (D&C)一种著名的递归式问题解决方法。是对冒泡排序的改进型。
举例说明一切:
采用分而治之的策略:需要一个分界值pivot, arr = {4,2,5,1,7,9,3,8,6}
取分界值 pivot = 4, 起始位子:start = 0; 结束位子end = 8;
public int[] quickSort(int[] arr, int start, int end){
int pivot = arr[start];
int i = start; // 左边开始
int j = end; // 右边开始
while(i < j){ // 当左边的标记位置小于右边的标记位置
while(i < j && arr[i] < pivot){ // 起始位于分界值比较
i++;
}
while(i < j && arr[j] > pivot){ // 结束位于分界值比较
j--;
}
if( i < j && arr[i] == arr[j]){
i++;
}else{
int temp = arr[j];
arr[j] = arr[i];
arr[i] = temp;
}
//一轮循环完,分界值左边的都小于他,右边的都大于他
if( i - 1 > start){// 分界值左边需要排序
arr = quickSort(arr,start, i - 1);
}
if( j + 1 > end){// 分界值右边需要排序
arr = quickSort(arr,j + 1, end);
}
//递归循环
}
return arr;
}