猫史档案馆


【快速排序】

用户:wrmdcxywrmdcxy查看:18 回复:6 评论:18 创建时间:2021-07-31T15:52:02


有的时候需要数据排序,但是排序有很多种方法,应该选哪种呢?

 

其实很简单:用内置函数emotion_dogeemotion_doge

array.sort()

 

欸发错了。。

 

//before main()
import java.util.Arrays;

//.......

//in main()

Arrays.sort(arr);

 

 

但是,你们知道快速排序吗?(知道的大佬可以出门右转)

快速排序的基本流程见下图

 

白色:待排序

红色:枢纽元素

绿色:(虚拟的)空位

黄色:需要交换

蓝色:已排序(到达正确位置)

箭头i和j:快慢指针(元素与枢纽元素比较)

center_image

 

看完流程,我们来写代码。

 

首先看结构

center_image

 

 

然后是基本的程序入口

center_image

 

可以看到,有一个qui_sort,没错,打少了"ck"。因为qui_sort是程序本体。

 

现在,我们把数组最后一个元素作为枢纽元素(如图)

 

但是按照上面的图,我们不仅要排序,还要把枢纽元素位置返回,并进行递归操作。

如下图,假设有一个函数getmid这个函数执行了图中快慢指针查找并交换,然后返回i的位置。

center_image

因为程序设计,i需大于j则停下。枢纽元素前的部分的结尾应为i的位置-1,枢纽元素后的部分开头为i的位置。

 

接下来就是getmid部分。

函数签名int getmid(int[] array,int start,int end)

center_image

 

i,j指针和pivot枢纽:

center_image

 

首先我们需要一个while循环,判断条件i<=j。当i>j时停止。center_image

 

图中搜索规则为:当i找到大于pivot的元素时停止,当j找到小于pivot的元素时停止

(即找到不该在此的元素,并与对面交换)

没有初始化,也没有循环体,要的只是将i,j迭代。

center_image

 

当找好目标或搜索完毕时,进行处理

 

(另外说一句,t m p这个变量是提前定义好的,作临时变量使用)center_image

 

最后:返回枢纽元素位置center_image

 

 

随便来测试一下:

center_image

 

结果:

center_image

 

别问为啥发py专区


回复

上一页1 页 / 共 1下一页
腾讯内部员工腾讯内部员工

pycharm真的好用吗?

点赞0


评论


爵士OIer爵士OIer

这是啥语言,怎么我看着很符合C++语法 /yiw

点赞0


评论


wrmdcxywrmdcxy

发现了一处错误,so请以源码为准

demo.java

wrmdcxy.gitee.io/bcm/new/codearea.html?path=java/demo/demo.java

sort.java

wrmdcxy.gitee.io/bcm/new/codearea.html?path=java/demo/sort.java

(ps:点击左上角COPY即可复制)

另外,在demo.java中改成用随机数来填数组。

center_image

点赞0


评论


Albert钟Albert钟

看到写Java的我都特别佩服awa 不知道为啥,喵++会搞一点,看Java教程却直发愣。。。

点赞0


评论


AlcalaAlcala

感觉喵没二分插入排序好用(

点赞1


评论


真·憨憨真·憨憨

第一眼看成C++了哈哈哈哈

点赞1


评论