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...