排序之选择排序

本文介绍了选择排序的基本原理及实现过程,包括直接选择排序和堆排序两种方法,并详细解释了堆排序如何通过减少比较次数来提高排序效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


       排序分为5类,本篇文章主要是研究选择排序,选择排序分为直接选择和堆排序。


       选择:每一步都从待排序的记录中选择出最小按顺序存放在已排好序的记录后

直接选择排序:

第一趟:

         如上图初始状态为 3820 46 38 74 91 12 25,他们是带排序的记录,从待排序的记录中选择出最小为12,按顺序存放在已排好序的记录后,因为还没有排好的序列,所以12就是第1个,和第一个38交换。

 

第二趟:

         第一趟结束后,未排序的为上图“第1趟”中除‘12’外的其他的黑色的记录,重复从待排序的记录中选择出最小为12,按顺序存放在已排好序的记录后,剩余的最小的为20,要放在12的后面,本例中不用动20

 

第三趟……一直到所有的比较完毕,这个排序的过程形成一个三角形,如上图中红色区。

 

时间复杂度:

         如果带排序列有n个元素,第1趟要比较n-1次,第2趟n-2次吗,第n-1趟1次,所以排完所有的就要进行n(n-1)/2次,所以时间复杂度为O(n2)。

堆排序:

       堆排序是对直接选择排序的改进,减少比较的次数,提高效率,比较复杂的是在建堆的过程。

建堆

       1、  按照层的顺序先建好一个二叉树。从0开始对节点进行编码。

       2、  对于有n个元素的序列从 ⌊ n/2⌋-1(最后一个非叶子节点)开始比较,首先和其子节点,上图建的是小顶堆,所以如果比子节点小则交换,如果有两个子节点且都小于父节点,则将父节点和较小的节点交换。

       3、  然后比较上一个节点,直到建好堆。

 

取出堆中的元素

       将根节点和最后一个叶子节点交换,然后重新建堆。重复过程直到所有的节点输出。

 

小结:

         选择排序的中心思想就是“待排序的记录中选择出最小的,按顺序存放在已排好序的记录后”。堆排序是在直接排序上的一种改进,可以借助之前排序的结果,减少比较的次数,降低时间复杂度。

评论 15
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值