1. 写一个快速排序的方法
方法里形参分别为需要进行排序的数组、数组起始位置、数组结束位置。
static void fastsort(int[] arr,int start,int end)
1.1 先进行判断最左端和最右端是否满足条件
if (start>end) {
return;
}`
1.2 定义变量来接收参数值
int base = arr[start];
int i = start;
int j = end;
1.3 两边开始进行比较大小(右边先开始走)
先从右往左走,检测到比基准数小的数就停下,且左边值仍然小于右边的值
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;
1.4 当一个循环结束
把i和j相遇位置的值与基准值进行交换
arr[start]=arr[i];
arr[i]=base;
1.5 递归对运行完的进行递归排序
fastsort(arr,start,i-1);
fastsort(arr,j+1,end);
2. 在主方法调用快速排序方法
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);
}
}