快速排序是对冒泡排序的改进。
思想:
通过一趟排序把要排序的数分为两部分呢,其中一部分的所有数据比另一部分的所有数据都要小。
然后按照此方法,对两部分数据分别进行快速排序,整个过程可以递归进行。
public void quickSort(int[] arr,int left,int right) {
int l=left;
int r=right;
//pivot是中轴的意思
int pivot=arr[(left+right)/2];
int temp=0; //临时变量,作为交换值
//while循环,将小的放左边,大的放右边
while(l<r) {
while (arr[l] < pivot) {
l += 1;
}
while (arr[r] > pivot) {
r -= 1;
}
if (l >= r) {
break;
}
//交换
temp = arr[l];
arr[l] = arr[r];
arr[r] = temp;
//如果交换完成后,arr[i]==pivot,前移
if (arr[l] == pivot) {
r -= 1;
}
if (arr[r] == pivot) {
l += 1;
}
}
//如果相等,必须l++,r--,否则栈溢出
if(l==r){
l+=1;
r-=1;
}
//向左递归
if(left<r){
quickSort(arr,left,r);
}
//向右递归
if(l<right){
quickSort(arr,l,right);
}
}