方法里形参分别为需要进行排序的数组、数组起始位置、数组结束位置。
static void fastsort(int[] arr,int start,int end)
if (start>end) {
return;
}`
int base = arr[start];
int i = start;
int j = end;
先从右往左走,检测到比基准数小的数就停下,且左边值仍然小于右边的值
while (i < j && arr[j] >=base) {
j--;
}
再从左往右走,检测到比基准数大的数就停下,且左边值仍然小于右边的值
当两个循环都停止时
while (i < j && arr[i] <= base) {
i++;
}
交换满足两个条件的值
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
把i和j相遇位置的值与基准值进行交换
arr[start]=arr[i];
arr[i]=base;
fastsort(arr,start,i-1);
fastsort(arr,j+1,end);
public static void main(String[] args) {
int[]arr = {3,7,9,5,2,14,16,13,1,10};
fastsort(arr,0,arr.length-1);
for (int a:arr) {
System.out.print(a+" ");
}
}
package com.suanfa.domin;
public class FastSort {
public static void main(String[] args) {
int[]arr = {3,7,9,5,2,14,16,13,1,10};
fastsort(arr,0,arr.length-1);
for (int a:arr) {
System.out.print(a+" ");
}
}
static void fastsort(int[] arr,int start,int end){
//先判断start和end是不是成立,如果不成立则结束循环
if (start>end) {
return;
}
int base = arr[start];
int i = start;
int j = end;
while(i!=j) {
// 1.先从右往左进行检索,找到满足条件值则停下跳出循环
while (i < j && arr[j] >=base) {
j--;
}
// 2.再从左侧向右侧进行检索,找到满足条件值则停下跳出循环
while (i < j && arr[i] <= base) {
i++;
}
// 3.交换满足条件的两个位置的值
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
// 4.交换i和j相遇位置的值和base
arr[start]=arr[i];
arr[i]=base;
// 5.递归进行排序
// 5.1左边进行排序
fastsort(arr,start,i-1);
// 5.1左边进行排序
fastsort(arr,j+1,end);
}
}