对快排做个总结
快排适合数据较多,如果数据少(有的说是7,有的说是50),就用直接插入排序(是简单排序中性能最好的)。
快排主旨是:定义两个定位角标,用来与枢轴(关键字)作比较,小的放前边,大的放右边。
public static void Qsort(int arr[], int low, int high) { //快排大纲
int pivot; //定义枢值角标
while (low < high) { //开始进行排序
pivot = partition(arr, low, high); //调用partition,将数据一分为二,实现一次排序
Qsort(arr, low, pivot - 1); //对低字表进行递归排序
low = pivot + 1; //尾递归
}
}
public static int partition(int arr[], int low, int high) { //Partition函数,交换字表记录,排序
int pivotkey; //定义枢值
int m = (high - low) / 2 + 1; //根据前中后三个数,确定枢值
if (arr[low] > arr[high]){ //取三个数中间值为枢值
swap(arr,low,high);
}
if (arr[m] > arr[high]){
swap(arr,m,high);
}
if (arr[m] > arr[low]){
swap(arr,m,low);
}
pivotkey = arr[low]; //把枢值放在最左端
while (low < high) {
while (low < high && arr[high] >= pivotkey) { //判断是否要交换
high--;
}
arr[low] = arr[high]; //采用替换操作,有效率
while (low < high && arr[low] <= pivotkey) {
low++;
}
arr[high] = arr[low];
}
arr[low] = pivotkey; //将枢值替换回arr[low]
return low; //返回枢值所在位置
}
public static void swap(int[] arr, int low, int high) { //换值方法
int temp;
temp = arr[low];
arr[low] = arr[high];
arr[high] = temp;
}
去看看java快排的实现源码。