首先,下面的代码是我学了网上大神教的快速排序法修改的,代码里每一部分都有注释,不多说了,直接上代码,简单粗暴
public class QuickSort {
public static void main(String[] args) {
/*
* 思想:二分法
* 建议:不太理解的,可以打断点去看,我觉得debug看会对这个排序法更了解,代码直接可以运行
* 用这个数组为例子int [] arry = {6,1,2,7,9,3,4,5,10,8};
* 整体思路:取第一个数为基准,然后最终要达到的结构其实就是这样,比6小的数 6 比6大的数,第一轮比较完毕后, * 继续然后二分法思想,调用递归,多次重复以上操作
* 后面还有改进的方法
*/
int [] arr = {6,1,2,7,9,3,4,5,10,8};
sort(arr,0,9);
for(int i = 0;i < arr.length;i++){
System.out.print(arr[i] + " ");
}
}
public static void sort(int arr[],int low,int high)
{
int l=low;
int h=high;
int standard=arr[low];//定这个数为基准
while(l<h)//这里要记得加l<h,这是递归结束的判断
{
while(l<h&&arr[h]>=standard){//这里要记得加l<h,这是避免数组下标越界
h--;//如果比较的数比基准数大,h--,否则进入下面的交换两个比较数的位置,这里是从后往前
}
if(l<h){//与前面的数交换
int temp=arr[h];
arr[h]=arr[l];
arr[l]=temp;
l++;
}
while(l<h&&arr[l]<=standard){
l++;//如果比较的数比基准数小,l++,否则进入下面的交换两个比较数的位置,这里是从前往后
}
if(l<h){//与后面的数交换
int temp=arr[h];
arr[h]=arr[l];
arr[l]=temp;
h--;
}
}
if(l>low){
sort(arr,low,l-1);//把排序后(第一轮是比6小的数,以此类推 )的右边再重复sort排序,二分法思想,l-1就是左边的最后一个数的下标
}
if(h<high){
sort(arr,l+1,high);//把排序后(第一轮是比6大的数,以此类推 )的左边再重复sort排序,二分法思想
}
}
}
优化:就是对基准数的优化,三数取中法
举例:待排序序列为:8 1 4 9 6 3 5 2 7 0
左边为:8,右边为0,中间为6
我们这里取三个数排序后,中间那个数作为枢轴,则枢轴为6,所以取6为基准数