a上标3下标6算法_简单选择排序算法(C语言详解版)

该算法的实现思想为:对于具有 n 个记录的无序表遍历 n-1 次,第 i 次从无序表中第 i 个记录开始,找出后序关键字中最小的记录,然后放置在第 i 的位置上。例如对无序表 {56,12,80,91,20} 采用简单选择排序算法进行排序,具体过程为:
  • 第一次遍历时,从下标为 1 的位置即 56 开始,找出关键字值最小的记录 12,同下标为 0 的关键字 56 交换位置:8a03aa762de35f816d11257bbcd8c700.png 
  • 第二次遍历时,从下标为 2 的位置即 56 开始,找出最小值 20,同下标为 2 的关键字 56 互换位置:39c63cdd456e20a31a6b23a52ebf75d4.png 
  • 第三次遍历时,从下标为 3 的位置即 80 开始,找出最小值 56,同下标为 3 的关键字 80 互换位置:b383806640e1de31dff573775620af27.png 
  • 第四次遍历时,从下标为 4 的位置即 91 开始,找出最小是 80,同下标为 4 的关键字 91 互换位置:a6085a9fb53cad424182273a8ee03efd.png 
  • 到此简单选择排序算法完成,无序表变为有序表。
简单选择排序的实现代码为:
#include #include #define MAX 9//单个记录的结构体typedef struct {    int key;}SqNote;//记录表的结构体typedef struct {    SqNote r[MAX];    int length;}SqList;//交换两个记录的位置void swap(SqNote *a,SqNote *b){    int key=a->key;    a->key=b->key;    b->key=key;}//查找表中关键字的最小值int SelectMinKey(SqList *L,int i){    int min=i;    //从下标为 i+1 开始,一直遍历至最后一个关键字,找到最小值所在的位置    while (i+1length) {        if (L->r[min].key>L->r[i+1].key) {            min=i+1;        }        i++;    }    return min;}//简单选择排序算法实现函数void SelectSort(SqList * L){    for (int i=0; ilength; i++) {        //查找第 i 的位置所要放置的最小值的位置        int j=SelectMinKey(L,i);        //如果 j 和 i 不相等,说明最小值不在下标为 i 的位置,需要交换        if (i!=j) {            swap(&(L->r[i]),&(L->r[j]));        }    }}int main() {    SqList * L=(SqList*)malloc(sizeof(SqList));    L->length=8;    L->r[0].key=49;    L->r[1].key=38;    L->r[2].key=65;    L->r[3].key=97;    L->r[4].key=76;    L->r[5].key=13;    L->r[6].key=27;    L->r[7].key=49;    SelectSort(L);    for (int i=0; ilength; i++) {        printf("%d ",L->r[i].key);    }    return 0;}
运行结果: 13 27 38 49 49 65 76 97

86eeb44dd1400b2c45b960da37950934.png

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值