快速排序详解-java实现
admin
2024-03-22 17:08:55
0

一、快速排序

整体过程
1.先从数组中找一个数作为基准数,
2 进行分区,分区时大于这个数得全部放到右边,小于这个数得全部放到左边,等于这个数得全部放到中间(核心过程)
3再通过递归再更小得范围执行2步骤,直到递归到只有一个数

思路解析
比如针对 3 4 2 1 5 6 0 3
它的一个思路是首先有一个左边区域和右边区域,

左边区域的最靠右的起始下标为-1,右边区域的最靠左的起始下标为length-1

然后以数组最后一个数3为界限,大于这个数的都在右边,小于这个数的都在左边

首先排的时候index 为0,然后判断下标为0的数3 ==3,所以左右边界不动,index继续++
当index为1,判断下标为1的数4 4>3 ,所以右边界往右移动一位到length-2 值为0 将值为0与值为4调换位置 ======> 3 0 2 1 5 6 4 3
然后继续判断index为1 此时值为 0 0<3 所以左边界加1到0,值为3,将3与0调换位置,然后index+1 到2 ======> 0 3 2 1 5 6 4 3

当index为2时,判断下标为2的数 2<3, 所以左边界加1到1, 值为3 将 3与2
调换位置,然后index+1 到3 ======> 0 2 3 1 5 6 4 3
当index为3时,判断下标为3的数 1<3, 所以左边界加1到2 值为3 将3与1调换位置 然后index+1 到4 ======> 0 2 1 3 5 6 4 3

当index为4时,判断下标为4的数 5>3, 所以右边界往右移动一位到length-3 值为6,将值为6与值5调换位置 ======> 0 2 1 3 6 5 4 3
当index为4时,判断下标为4的数 6>3, 所以右边界往后移动一位到length-4----即下标为4,但是此这样就不满足index<右边界 所以跳出来
跳出来后将index为4的值和数组的最后一个值做交换 ===》 0 2 1 3 3 5 4 6
即结束

代码实现

public static void quickSort1(int[] arr) {if (arr == null || arr.length < 2) {return;}process(arr, 0, arr.length - 1);
}
public static void process(int[] arr, int L, int R) {if (L >= R) {return;}int[] equalE = partition(arr, L, R);process(arr, L, equalE[0] - 1);process(arr, equalE[1] + 1, R);
}// arr[L...R]范围上,拿arr[R]做划分值,
// L....R < = >
public static int[] partition(int[] arr, int L, int R) {int lessR = L - 1;int moreL = R;int index = L;while (index < moreL) {if (arr[index] < arr[R]) {lessR++;swap(arr, lessR, index);index++;} else if (arr[index] > arr[R]) {moreL--;swap(arr, moreL, index);} else {index++;}}swap(arr, moreL, R);//比如342555578 //返回3,6return new int[] { lessR + 1, moreL };  
}public static void swap(int[] arr, int i, int j) {int tmp = arr[i];arr[i] = arr[j];arr[j] = tmp;
}

但是我们现在实现的代码整体时间复杂度为O(n^2); ->因为当数据为[0,1,2,3,4,5]==>这种情况时间复杂度是O(N^2)
所以其实是可以进行优化处理的
如何优化呢?即随机选择了一个划分值放到了最右边
整体的代码量比上面多出一行
因为是随机选择得划分值,那么打到任意一个位置,选取作为划分值得权重是一样得
这样一来根据数学推算,最后收敛于O(NlogN)

public static void quickSort3(int[] arr) {if (arr == null || arr.length < 2) {return;}process3(arr, 0, arr.length - 1);}public static void process3(int[] arr, int L, int R) {if (L >= R) {return;}swap(arr, L + (int) (Math.random() * (R - L + 1)), R);int[] equalArea = partition(arr, L, R);process3(arr, L, equalArea[0] - 1);process3(arr, equalArea[1] + 1, R);}
// arr[L...R]范围上,拿arr[R]做划分值,
// L....R < = >
public static int[] partition(int[] arr, int L, int R) {int lessR = L - 1;int moreL = R;int index = L;while (index < moreL) {if (arr[index] < arr[R]) {lessR++;swap(arr, lessR, index);index++;} else if (arr[index] > arr[R]) {moreL--;swap(arr, moreL, index);} else {index++;}}swap(arr, moreL, R);//比如342555578 //返回3,6return new int[] { lessR + 1, moreL };  
}public static void swap(int[] arr, int i, int j) {int tmp = arr[i];arr[i] = arr[j];arr[j] = tmp;
}

关键点
把核心过程定义出来,然后左右边界求出来,之后通过递归不断的遍历下去,
就是再更小的范围上求出划分值对应得左右边界

相关内容

热门资讯

荞麦面粉的做法大全家常,荞麦面... 荞麦面条 食材准备:荞麦面粉 200 克、普通面粉 100 克、水 150 - 160 毫升、盐...
不过总有那么几道菜,能凭借其独... 天气开始升温,难免会有食欲不振的时候,不过总有那么几道菜,能凭借其独特的魅力,瞬间打开你沉睡的味蕾,...
“五一”假期不妨来南京玄武,赴... 扬子晚报网5月1日讯(通讯员 玄萱 记者 董婉愉 闫春旭)徐家鸭子、许阿姨糕团、吊州爆肚……5月1日...
阳泉美食:舌尖上的美味探险 阳泉,这座位于山西省东部的城市,以其悠久的历史和独特的地域文化闻名。当然,阳泉的美食同样让人趋之若鹜...
素炒茄子的家常做法,清炒茄子的... 素炒茄子 食材准备:茄子 2 个、青椒 1 个、红椒 1 个、蒜 3 瓣、姜 1 块、盐 3 克...
家庭自制老酸奶的详细步骤与多种... 在现代生活中,越来越多的人开始关注健康饮食,酸奶作为一种营养丰富的乳制品,受到了大家的喜爱。自己在家...
南昌最火的江西地方菜系之一:永... 永新菜系作为赣菜文化的重要分支,以其独特的调味哲学与烹饪技艺独树一帜,在北纬27度的滋养下自成一派。...
直击“五一”广交会首日:外国客... 5月1日,第137届广交会第三期在广东广州开幕。恰逢“五一”假期首日,琶洲港澳客运口岸也迎来出境入境...
湖北多家景区紧急提醒! 五一假期来临 湖北旅游持续火爆 目前,省内多家景区 发布紧急提醒: 错峰、限行、延长开放时间! 湖北...
东莞旅游有什么山可爬山 东莞,这座位于广东省的城市,不仅是工业重镇,更是一处隐藏的自然瑰宝。在这里,可以远离都市的喧嚣,感受...
浙江文旅观察:古街如何从“网红... 丽水5月1日电(傅飞扬)“龙泉的西街太漂亮了,文化底蕴深厚,时尚的店铺和产品也很多,没想到中国的县城...
耗费十年打磨一碗贴心面,打造峡... 近日手握“五一小长假”的牛马们,被各地文旅整疯了! 你家出 “春日好景巡游精品线”,我就搞 “100...
快来凌源开启完美假期吧! “五一”到,出游正当时 来凌源 赏湖光山色 览翠岭碧波 在自然里放松 于美景中沉醉 记者|郑 赫
五一绵阳九皇山人气旺!精彩活动... 五一假期首日,阳光明媚,四川绵阳九皇山景区内人潮涌动,呈现出一片热闹非凡的景象。景区精心策划筹备的一...
“五一”假期首日:文旅市场火热... “五一”假期第一天,文旅消费市场不出意外地表现火爆。 旅游度假、探亲等需求高度叠加,全国各地铁路、民...
武汉昙华林古风潮玩市集点燃烟火... 斑驳的青石板、沧桑的百年砖墙,与潮流市集交织出时空交错的独特韵味。“五一”假期首日,武昌昙华林历史文...
大西北环线旅游必备清单与避坑全... 狂沙中的觉醒(Awakening in the Sandstorm) 2025年4月,我背起40升登...
青海省祁连县“五一”黄金周“北... 时代星报青海讯(记者 何方 通讯员 马德平 李青)5月1日,“五一”黄金周“北驾祁连·9号公路”主题...