aes算法c语言实现_【数据结构】选择排序算法的实现(C语言)

9cef3c1823abf1c0f804dd7315a37aa1.png

排序之选择排序算法的实现

算法思路:

第一趟从待排序区选择最小(最大)的元素放到排序区的起始位置,第二趟从剩下的待排序区选择最小(最大)的元素放到排序区的第二个位置。以此类推,直到待排序区的元素个数为0。该算法为不稳定的排序算法。

将数组第一个元素设为开始时的最小值。实现过程中i作为区分已排序区和未排序区的交界,i左边为排序区,右边为未排序区。j作为索引,遍历未排序区,与当前i上的值比较,合适则交换,否则继续向下遍历。

一趟过程示例:

fc0f12d313fab686a256d0ebd4bad0a0.png
过程1

86ce482019fb1ff93c05e83eb99dcaf6.png
过程2

64fbecb3a8dd7b0e4466dc76fb2056ed.png
过程3

0a321f18a10c3411e56b3d2521471bf1.png
过程4

f7f9e281b7b8244efa739ed2dcc48f76.png
过程5

a2fe4dcaac88ce1189d53ad697af7560.png
过程6

3ada2ca0ad0994bf1ec67be2a7ec4a9f.png
第二趟开始

C语言实现:

#include

测试结果:

f12dba4e88f4db42ea664bc16c436ea6.png
程序结果

选择排序时间复杂度分析:

  • 选择排序算法交换操作次数介于0和(n-1)之间(正序为0次,最坏情况时都要交换为n-1次)
  • 比较操作次数在n(n-1)/2之间(选择排序算法比较次数与数据初始状态无关,每趟都要比较,次数为,(n-1)+(n-2)+...+1=n(n-1)/2),为O(
    )
  • 赋值操作次数介于0和3(n-1)之间(同交换操作,每次交换操作需要3次赋值操作,故最坏情况下需要赋值操作3(n-1)次)
  • 总的时间复杂度为O(
    )

稳定性:

选择排序是给每个位置选择当前元素最小的,比如给第一个位置选择最小的,在剩余元素里面给第二个元素选择第二小的,依次类推,直到第n-1个元素,第n个元素不用选择了,因为只剩下它一个最大的元素了。那么,在一趟选择,如果一个元素比当前元素小,而该小的元素又出现在一个和当前元素相等的元素后面,那么交换后稳定性就被破坏了。举个例子,序列5 8 5 2 9,我们知道第一遍选择第1个元素5会和2交换,那么原序列中两个5的相对前后顺序就被破坏了,所以选择排序是一个不稳定的排序算法。[1]

Bingo!

参考

  1. ^百度百科:选择排序算法
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值