快排的优化
- 快排的优化主要针对于递归来讲,快排有三种排序方式,两种优化方案:
- 排序方式:
(1):固定位置选取基准法 (2):随机选取基准法 (3):三分取中法
优化方案:
(1):一定数量的数据范围内采取直接插入排序,因为在排序的过程当中数据越来越有序,直接插入排序时间复杂度更快。
(2):聚集相同基准元素法,因为:有可能选取的基准,在左右两面都有相同的元素,我们可以将他们聚集到一起,以此来达到,减少比较次数的方案。
我给出基本的递归算法:
- 代码实现:
public static int Partion(int[] arr,int low,int high) {
int tmp = arr[low];
while(low < high) {
while((low < high) && arr[high] >= tmp) {
high--;
}
if(low >= high) {
break;
} else {
arr[low] = arr[high];
}
while(low < high && arr[low] <= tmp) {
low++;
}
if(low >= high) {
break;
}
else {
arr[high] = arr[low];
}
}
arr[low] = tmp;
return low;
}
public static void Quick(int[] arr,int start,int end) {
int par = Partion(arr,start,end);
if(par > start+1)
Quick(arr,start,par-1);
}
if(par < end-1) {
Quick(arr,par+1,end);
}
}
public static void Quick_Sort(int[] arr) {
Quick(arr,0,arr.length-1);
}