package test.fastsort;
public class FastSort {
public static void main(String[] args) {
int[] test = {8, 3, 6, 1, 9, 10, 3, 4, 5, 2, 11};
FastSort fs = new FastSort();
int end = test.length - 1;
fs.fastSort(test, 0, end);
for(int i: test){
System.out.print(i);
}
}
public void fastSort(int[] array, int start, int end){
if(start < end){
//用递归实现 随便一个数的左边都是大于他的数 右边都是小于他的数 从而有序
int flag = getFlag(array, start, end);
//左边乱序递归排序,直到最小单位数对比交换也就是两个数
fastSort(array, start, flag - 1);
//右边乱序递归排序
fastSort(array, flag + 1, end);
}
}
//flag标识位置,位置左边都是比对比数大的,位置右边都是比对比数小的 index数组角标
//返回标识位
public int getFlag(int[] array, int start, int end){
int flag = start;
int fixNum = array[end];
for(int index = start; index <= end - 1;index++){
if(array[index] > fixNum){
//大于对比位的->当前为数组末尾的数是对比数,放到flag位置,flag右移,相当于数组大小不变,将大的数放到左边
swap(array, index, flag);
flag++;
}else if(array[index] == fixNum){
flag++;
}
}
//最后将flag位置的数换成对比数,以实现对比数左边的都比其大,右边的都比其小
swap(array, flag, end);
return flag;
}
private void swap(int[] array, int index, int flag) {
int temp = array[index];
array[index] = array[flag];
array[flag] = temp;//可以优化,如果交换的两个数相等可以跳过
}
}
快排,以数组末尾为对比数
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
推荐阅读更多精彩内容
- 前几天看到知乎上有个问题,“有哪些歌曲,你根本不知道歌词在唱什么,但是却听懂了,而不能自已?”,我立马想起了《se...