直接选择排序

直接选择排序

算法思路:

假设有n个数,需要进行n-1趟比较。

第1趟比较:将第一个位置的数据依次和它后面的每个数据进行比较, 如果第一个位置的数据大于后面的某个数据,就交换它们...以此类推。 经过第一趟比较之后,这组数据中最小的数据被选出排在第一位。

第2趟比较:将第二个位置的数据依次和它后面的数据进行比较,如果 大于后面的某个数据,就交换它们...以此类推。经过第二趟比较之后这 组数据的第二小的数据被选出排在第二位。

.

.

.

经过n-1趟比较之后,这组数据中第n-1小的数据被选出排在第n-1位,剩下的就是最大的数据排在最后一位。

算法实现

104105_NUFC_2601381.png 

从上面的排序算法中可以发现,每一趟比较只要程序发现某个数据比前面的数据小就立即交换它们,这会导则每一趟中都会频繁的进行数据交换,导致算法效率低下。

改进思路

每趟比较的目的只是找出本趟比较中最小数据的索引(minIndex),本趟结束之后判断本趟开始下标i与最小下标minIndex如果不相等,交换i和minIndex两处的数据

改进算法实现

104115_LGLy_2601381.png 

 

算法总结:

时间复杂度为:O(n²)

空间复杂度为:O(1)

直接选择排序是不稳定的。

转载于:https://my.oschina.net/u/2601381/blog/706837

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值