该算法的实现思想为:对于具有 n 个记录的无序表遍历 n-1 次,第 i 次从无序表中第 i 个记录开始,找出后序关键字中最小的记录,然后放置在第 i 的位置上。

例如对无序表{56,12,80,91,20}采用简单选择排序算法进行排序,具体过程为:

第一次遍历时,从下标为 1 的位置即 56 开始,找出关键字值最小的记录 12,同下标为 0 的关键字 56 交换位置:

第二次遍历时,从下标为 2 的位置即 56 开始,找出最小值 20,同下标为 2 的关键字 56 互换位置:

第三次遍历时,从下标为 3 的位置即 80 开始,找出最小值 56,同下标为 3 的关键字 80 互换位置:

第四次遍历时,从下标为 4 的位置即 91 开始,找出最小是 80,同下标为 4 的关键字 91 互换位置:

到此简单选择排序算法完成,无序表变为有序表。

简单选择排序的实现代码为:

#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

python选择排序算法图解_简单选择排序算法(C语言详解版)相关推荐

  1. 查询数据的排序的位置_简单选择排序C++实现

    简单选择排序是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,第一次从下标为0的开始,将下标为0的这个数与后面的n-1个进行比较:找出最小或者最大的放在下标为0的这个位置 ...

  2. 华硕vm510l拆电池图解_华硕vm510l的拆机教程详解 参数报价

    笔记本电脑 是现在人们使用的比较多的数码产品,不仅仅办公需要,而且现在娱乐也能够使用.笔记本电脑也分为商务笔记本和普通笔记本.今天小编要给大家介绍的这款笔记本电脑是华硕vm510l.华硕是我们我家的自 ...

  3. 微信小程序python解析获取用户手机号_微信小程序获取用户手机号详解

    最近在做一款微信小程序,需要获取用户手机号,具体步骤如下: 流程图: 1.首先,客户端调用wx.login,回调数据了包含jscode,用于获取openid(用户唯一标识)和sessionkey(会话 ...

  4. Java入门项目:实现简单学生管理系统(逐个功能详解版)

    文章目录 前言 一.学生管理系统实现思路 二.定义学生类 三.主界面的代码编写 四.添加学生的代码编写 五.查看所有学生的代码编写 六.删除学生的代码编写 七.修改学生的代码编写 八.项目结构和源码 ...

  5. 怎么查看python是否安装好了pyinstaller_Python PyInstaller安装和使用教程(详解版)...

    在创建了独立应用(自包含该应用的依赖包)之后,还可以使用 PyInstaller 将 Python 程序生成可直接运行的程序,这个程序就可以被分发到对应的 Windows 或 Mac OS X 平台上 ...

  6. java 排序原理_简单选择排序算法原理及java实现(超详细)

    简单选择排序的原理 简单选择排序的原理非常简单,即在待排序的数列中寻找最大(或者最小)的一个数,与第 1 个元素进行交换,接着在剩余的待排序的数列中继续找最大(最小)的一个数,与第 2 个元素交换.以 ...

  7. 算法一之简单选择排序

    一.  选择排序的思想 选择排序的基本思想是:每一趟在n-i+1(i=1,2,-n-1)个记录中选取关键字最小的记录作为有序序列中第i个记录.基于此思想的算法主要有简单选择排序.树型选择排序和堆排序. ...

  8. 选择排序java代码_JAVA简单选择排序算法原理及实现

    简单选择排序:(选出最小值,放在第一位,然后第一位向后推移,如此循环)第一位与后面每一个逐个比较,每次都使最小的置顶,第一位向后推进(即刚选定的第一位是最小值,不再参与比较,比较次数减1) 复杂度: ...

  9. 【简单排序算法】:简单选择排序、直接插入排序和冒泡排序

    [简单排序算法]:简单选择排序.直接插入排序和冒泡排序 简单选择排序: 原理:设所排序序列的记录个数为n.i取1,2,-,n-1,每次从所有n-i+1个记录(Ri,Ri+1,-,Rn)中找出最小的记录 ...

最新文章

  1. 关于分布式多级缓存架构,也许你一直考虑的太简单了
  2. HP Webinspect 10 访问wap的url
  3. boost::sort模块实现在大多数排序的数组示例上展开排序
  4. 阿里云积极落实等级保护制度,政务云全国首个通过等保2.0合规评测
  5. ef mysql code first_关于ef+codefirst+mysql(入门)
  6. C语言和设计模式(命令模式)
  7. 富士通大数据架构解决方案闪耀存储峰会
  8. 薛定谔Maestro教程--用户界面1
  9. 0基础,如何快速学习自媒体,详细教程
  10. 交互技术基础(复习)
  11. python对接蚂蚁验证码平台
  12. Qt解决连接https报错
  13. 从零学习Belief Propagation算法(二)
  14. 计算机组成原理笔记(王道考研) 第二章:数据的表示和运算1
  15. 华芯通关闭引发的深度思考
  16. 大数据起步之wormhole初识
  17. netcat 使用方法
  18. 33个高能CSS选择器让我受益匪浅
  19. c语言编程实践题,C语言实践编程题
  20. Zeal离线文档下载,以及报错解决方法

热门文章

  1. Flutter 成功在鸿蒙上运行;微信 8.0 发布;支付宝和微信支付达到反垄断标准 | 极客头条...
  2. 京东将上线“自营房产”业务;iPhone 12 或取消附赠有线耳机;OpenBSD 6.7 发布 | 极客头条...
  3. 技术大佬:我去,你写的 switch 语句也太老土了吧!
  4. 另类数据解读 : 口罩是什么时候成为硬通货的?!
  5. 主链增幅最高飚至 152%,主流币却惊现回落;以太坊发币速度持续放缓
  6. 国内首款 5G 机型开售;Google Chrome 大部分插件无人用;Firefox 69 Beta 9 发布 | 极客头条...
  7. 华为拟安装“俄版安卓”;百度回应内部贪腐;Android Studio 3.5 RC2 发布 | 极客头条...
  8. 漫画:一文学会面试中常问的 IO 问题!
  9. 真壕!腾讯员工平均月薪 7 万!
  10. 程序员如何借助 AI 开挂股票神预测?| 技术头条