简单选择排序_学习笔记-详解简单选择排序

本文目的

上一章节已经详细的向大家介绍过排序的相关概念(详见学习笔记-排序简单介绍) ,本文旨在为大家详细的介绍简单选择排序。

简单选择排序

通过每次选择最小(大)的关键字来进行排序的一种排序方法,是一种选择类排序

算法原理

首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。

算法流程

第一趟:从n个记录中找出关键码最小的记录和第一个记录交换;

第二趟:从第二个记录开始的n-1个记录中再选出关键码最小的记录与第二个记录交换。

第i趟,则从第i个记录开始的n-i+1个记录中选出关键码最小的记录与第i个记录交换,直到整个序列按关键码有序。

f05cfb995ee33735f8455d9ad8fe9c15.png

算法实现

2b1dd1e1da35d390f08c6bed15afcdf1.png
#include  #define elemType int /*元素类型*/int k=1;//轮次记录 void Print (elemType arr[], int len){int i;for (i=0; ia[j])        {            t=j;        }        }        int temp = a[i];        a[i]=a[t];        a[t]=temp;                        printf("第===%d===轮排序后结果如下:",k);Print (a, 9);k=k+1;    }}int main() {int i;    elemType arr[9] = {94,19,29,9,11,1,14,13,29};    printf("待排序的序列为:");    Print(arr, 9);      printf("");        Sort (arr,9);    printf("");    printf("排好序的结果如下:");    Print(arr, 9);       }

算法分析

时间复杂度

简单选择排序的比较次数与序列的初始排序无关。假设待排序的系列有N个元素,则比较次数总是n(n-1)/2。

最好情况下,即待排序记录初始状态就已经是正序排列了,则不需要移动记录。但是需要比较,此时时间复杂度O(n^2)

最差情况下,即初始为逆序,比较次数不变,移动次数最多。此时为O(n^2)。

平均情况为O(n^2)

空间复杂度

在简单选择排序中只使用了i,j,tmp这三个辅助元素,与问题规模无关,空间复杂度为O(1)。

排序稳定性

选择排序是给每个位置选择当前元素最小的,比如给第一个位置选择最小的,在剩余元素里面给第二个元素选择第二小的,依次类推,直到第n-1个元素,第n个元素不用选择了,因为只剩下它一个最大的元素了。那么,在一趟选择,如果一个元素比当前元素小,而该小的元素又出现在一个和当前元素相等的元素后面,那么交换后稳定性就被破坏了。所以选择排序是一个不稳定的排序算法。

本文的初衷为学习笔记的分享,部分图文来源于网络,如侵,联删。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值