漫画:什么是选择排序?

相关阅读:漫画:什么是分布式事务?

640?wx_fmt=jpeg

640?wx_fmt=jpeg



—————  第二天  —————



640?wx_fmt=jpeg

640?wx_fmt=jpeg

640?wx_fmt=jpeg


640?wx_fmt=jpeg

640?wx_fmt=jpeg

640?wx_fmt=jpeg

640?wx_fmt=jpeg



————————————



640?wx_fmt=jpeg

640?wx_fmt=jpeg

640?wx_fmt=jpeg

640?wx_fmt=jpeg


我们假定要获得升序数列,冒泡排序的原理是什么呢?


顾名思义,就是把每一元素和下一个元素进行比较和交换,使得较大的元素像气泡一样向右侧移动:

640?wx_fmt=png

这样一来,每一轮操作都可以把一个最大元素移动到最右侧,经过多轮操作,无序的数列成为了升序数列:

640?wx_fmt=png

这就是冒泡排序的基本原理。

640?wx_fmt=jpeg

640?wx_fmt=jpeg


640?wx_fmt=jpeg


640?wx_fmt=png

如果是按照冒泡排序的思路来指挥,结果会是什么样子呢?


640?wx_fmt=png


640?wx_fmt=png


640?wx_fmt=png


640?wx_fmt=png


640?wx_fmt=png


640?wx_fmt=png


640?wx_fmt=png


640?wx_fmt=png


如此一来,同学们一共交换了4次,还只是完成了冒泡排序的第一轮操作。如果继续下去,同学们心里恐怕会想:“这体育老师是不是有毛病啊?”

640?wx_fmt=png



在程序运行的世界里,虽然计算机并不会产生什么“负面情绪”,但是频繁的数组元素交换意味着更多的内存读写操作,严重影响了代码运行效率。

640?wx_fmt=jpeg


640?wx_fmt=jpeg


让我们来看一下具体的指挥过程:


640?wx_fmt=png


640?wx_fmt=png


640?wx_fmt=png


640?wx_fmt=png


640?wx_fmt=png


640?wx_fmt=png


如此一来,只需要很少的交换次数就可以完成队伍的排序,老师和同学们皆大欢喜。


640?wx_fmt=png



640?wx_fmt=jpeg

640?wx_fmt=jpeg


640?wx_fmt=png


640?wx_fmt=jpeg

640?wx_fmt=jpeg

public static void selectionSort(int[] array){	
    for(int i=0; i<array.length-1; i++){	
        int minIndex = i;	
        for(int j = i+1;j<array.length;j++){	
            minIndex = array[minIndex]<array[j] ? minIndex : j;	
        }	
        int temp = array[i];	
        array[i] = array[minIndex];	
        array[minIndex] = temp;	
    }	
}	
public static void main(String[] args) {	
    int[] array = new int[]{3,4,2,1,5,6,7,8,30,50,1,33,24,5,-4,7,0};	
    selectionSort(array);	
    System.out.println(Arrays.toString(array));	
}


640?wx_fmt=jpeg


640?wx_fmt=jpeg


640?wx_fmt=jpeg

640?wx_fmt=jpeg


640?wx_fmt=jpeg


640?wx_fmt=jpeg

640?wx_fmt=jpeg

640?wx_fmt=jpeg


640?wx_fmt=png


上图中,绿色的5原本排在橙色的5之前,但是随着第一轮元素3和绿色5的交换,使得后续操作中,绿色的5排在了橙色的5之后。

640?wx_fmt=jpeg


640?wx_fmt=jpeg

640?wx_fmt=jpeg


—————END—————

版权申明:内容来源网络,版权归原创者所有。除非无法确认,我们都会标明作者及出处,如有侵权烦请告知,我们会立即删除并表示歉意。谢谢。

640?wx_fmt=png

架构文摘

ID:ArchDigest

互联网应用架构丨架构技术丨大型网站丨大数据

640?wx_fmt=png

更多精彩文章,请点击下方:阅读原文

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值