快速排序原理:
首先选取一个数为基准数,然后以此基准数为标准
其次比基准数小的放到基准数左侧,比基准数大的放大基准数右侧。
最后将数组以基准数分为左右两个数组,再递归调上面过程。
代码实现:
public static void quickSort(int []arr,int left,int right) {
if(left>=right) {//如果左指针比右大结束
return;
}
int base=arr[left];//基准选取最左侧
int i = left; //左指针
int j = right; //右指针
while(i!=j) {//左指针在有指针左进循环
while(arr[j]>=base&&i<j) {//从右向左找第一个比基准数小的
j--;
}
while(arr[i]<=base&&i<j) {//从左向右找第一个比基准数大的
i++;
}
//交换
int temp=arr[i];
arr[i]=arr[j];
arr[j]=temp;
}
//出来是左右指向同一个位置
//交换此位置数与基准数
arr[left]=arr[i];
arr[i]=base;
//递归
quickSort(arr,left,i-1);
quickSort(arr,i+1,right);
}
快速排序的优化
修改基准数的选取,不再选取最左侧为基准。
例如平均数、中位数等可以优化算法。
性能最后八个排序总结一篇哦!