数组的五种排序方式

数组的五种排序方式

排序是对数组施加的最常用的算法,所谓排序,是指将数组元素按照从小到大或从大到小的顺序重新排列;那么对于元素较多的数组,排序算法的优劣至关重要; 一般情况下,通过排序过程中数组元素的交换次数来衡量排序算法的优劣;
而常用的排序算法有插入排序、冒泡排序、选择排序和java系统排序。

1.选择排序

 选择排序的原理如下:

• 将数组中每个元素与第一个元素比较,如果这个元素小于第一个元素, 则交换这两个元素
• 循环第 1 条规则,找出最小元素,放于第 1 个位置
• 经过 n-1 轮比较完成排序

简单而言,每轮都找到最小的放到前面。举例:{8 , 2 , 3 , 7 , 1}的排序过程如下所示:

数组: ary={8 , 2 , 3 , 7 , 1}
第 1 轮: ary={1 | 8 , 3 , 7 , 2}
第 2 轮: ary={1 , 2 | 8 , 7 , 3}
第 3 轮: ary={1 , 2 , 3 | 8 , 7}
第 4 轮: ary={1 , 2 , 3 , 7 | 8}
第 5 轮: ary={1 , 2 , 3 , 7 | 8}
调用选择排序的代码如下:
在这里插入图片描述

2.冒泡排序原理

 冒泡排序就是比较相邻的元素,将小的放到前面

冒泡排序举例:{8 , 2 , 3 , 7 , 1}的排序过程如下所示:
ary={8,2,3,7,1}
ary={2,8,3,7,1}
ary={2,3,8,7,1}
ary={2,3,7,8,1}
ary={2,3,7,1|8}
ary={2,3,7,1|8}
ary={2,3,7,1|8}
ary={2,3,1|7,8}
ary={2,3,1|7,8}
ary={2,1|3,7,8}
ary={1,2,3,7,8}

     调用冒泡排序的代码如下:

在这里插入图片描述如果对排序的执行过程还有疑惑,可以使用输出语句观察执行结果,在写程序的过程中,程序员常常会使用输出语句中进行调试,如图所示:
在这里插入图片描述

3. 插入排序

 插入排序原理:

• 将数组分为两部分, 将后部分的第一个逐一与前部分每一个元素比较,在合理位置插入
• 插入排序算法效率要高于选择排序和冒泡排序

插入排序举例:

{8 , 2 , 3 , 7 , 1}的排序过程如下所示:
第 1 步,假设第一个元素是已排序的 {8|2,3,7,1}
第 2 步,用 2 和"|“之前的所有元素比较,并插入 {8|2,3,7,1}
取出 2(temp=2)
temp 和 8 比,比 8 小,将 2 的位置赋值为大数(ary[1]=8) {8|8,3,7,1}
因为已到边界,直接赋值(ary[0]=2) {2,8|3,7,1}
2 和 8 排序完成
第 3 步,用 3 和”|“之前的所有元素比较,并插入 {2,8|3,7,1}
取出 3(temp=3)
temp 和 8 比,比 8 小,3 的位置赋值给大数(ary[2]=8) {2,8|8,7,1}
temp 和 2 比,比 2 大,插入 2 后面 (ary[1]=3) {2,3,8|7,1}
3、2、8 排序完成
第 4 步,用 7 和”|“之前的所以元素比较,并插入 {2,3,8|7,1}
取出 7(temp=7)
temp 和 8 比,比 8 小,7 的位置赋值给大数(ary[3]=8) {2,3,8|8,1}
temp 和 3 比,比 3 大,插入 3 后面(ary[2]=7) {2,3,7,8|1}
7、2、3、8 排序完成
第 5 步,用 1 和”|"之前的所以元素比较,幵插入 {2,3,7,8|1}
取出 1(temp=1)
temp 和 8 比,比 8 小,1 的位置赋值给大数 8 {2,3,7,8|8}
temp 和 7 比,比 7 小,8 的位置赋值给大数 7 {2,3,7,7|8}
temp 和 3 比,比 3 小,7 的位置赋值给大数 3 {2,3,3,7|8}
temp 和 2 比,比 2 小,3 的位置赋值给大数 2 {2,2,3,7|8}
到边界,赋值(ary[0]=1) {1,2,3,7,8|} 1、2、3、7、8 排序完成
调用插入排序的代码如下:
在这里插入图片描述

4.java系统排序

 JDK 提供的排序方法 Arrays.sort(ary)的效率要比我们之前写的选择排序、冒泡排序等效率高。 因为插入排序算法效率要高于选择排序和冒
 泡排序 ,所以我们比较 一下Arrays.sort(ary)和插入排序的效率,如图所示:

在这里插入图片描述
运行结果:
在这里插入图片描述
• 运行结果为 0 表示不到 1 毫秒内就完成了排序
• 不要试图在控制台输出数组元素,控制台打印输出不全

在这些排序方法中, 最为方便快捷的就是我们的java系统排序,简单快捷实用,所以希望看到这篇文章的你好好的学习并且掌握到java系统排序,这可以节约你大量的时间来做其他的事情。与君共勉之。

  • 34
    点赞
  • 166
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值