快速排序的思想是基于分治法加上递归思想,排序数组时,将数组分成两个小部分,然后对它们递归排序,直到它们都不可再分为止。快速排序的平均运行时间是O(nLog(n)),远比插入排序的O(n^2)时间小。
/**
* 快速排序
* @param arr
* @param start
* @param end
* @return
*/
private static int[] quickSort(int[] arr, int start, int end){
if(arr == null)
return null;
if(arr.length <= 1 || start - end == 0)
return arr;
int temp = arr[start];
int i = start;
int j = end;
//得到temp的位置i,且i的左边都小于temp,i的右边都大于temp
while(i < j){
if(temp > arr[i + 1]){
arr[i] = arr[i + 1];
i++;
}else {
if(temp > arr[j]){
arr[i] = arr[j];
arr[j] = arr[i + 1];
i++;
j--;
}else{
j--;
}
}
}
arr[i] = temp;
//start位大于end位才有需要进行快速排序
if(i - 1 > start)
quickSort(arr, start, i - 1);
if(i + 1 < end)
quickSort(arr, i + 1, end);
return arr;
}
其实这个算法还有一个问题是,每次排序都是以第一个元素来划分的,如果划分元素是随机的,或许更试用多种不同环境。
(PS:本人学疏才浅,如果有错误和问题请多多指教多多包涵!)
(PS:本人学疏才浅,如果有错误和问题请多多指教多多包涵!)