选择排序是排序算法的一种,这里以从小到大排序为例进行讲解。

基本思想及举例说明

简单 选择排序(从小到大)的基本思想是,首先,选出最小的数,放在第一个位置;然后,选出第二小的数,放在第二个位置;以此类推,直到所有的数从小到大排序。

在实现上,我们通常是先确定第i小的数所在的位置,然后,将其与第i个数进行交换。

下面,以对 3  2  4  1 进行选择排序说明排序过程,使用min_index 记录当前最小的数所在的位置。

第1轮 排序过程 (寻找第1小的数所在的位置)
3  2  4  1(最初, min_index=1)
3  2  4  1(3 > 2, 所以min_index=2)
3  2  4  1(2 < 4, 所以 min_index=2)
3  2  4  1(2 > 1, 所以 min_index=4, 这时候确定了第1小的数在位置4)
1  2  4  3 (第1轮结果,将3和1交换,也就是位置1和位置4交换)

第2轮 排序过程 (寻找第2小的数所在的位置)
1  2  4  3(第1轮结果, min_index=2,只需要从位置2开始寻找)
1  2  4  3(4 > 2, 所以min_index=2)
1  2  4  3(3 > 2, 所以 min_index=2)
1  2  4  3(第2轮结果,因为min_index位置刚好在第2个位置,无需交换)

第3轮 排序过程 (寻找第3小的数所在的位置)
1  2  4  3(第2轮结果, min_index=3,只需要从位置2开始寻找)
1  2  4  3(4 > 3, 所以min_index=4)
1  2  3  4(第3轮结果,将3和4交换,也就是位置4和位置3交换)

至此,排序完毕。

总结及实现

选择排序对大小为N的无序数组R[N]进行排序,进行N-1轮选择过程。第i轮选取第i小的数,并将其放在第i个位置上。当第N-1次完成时,第N小(也就是最大)的数自然在最后的位置上。

下面给出选择排序的C语言实现。

  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #include <iostream>
  4. using namespace std;
  5. void select_sort(int a[],int &n); //采用c++中的引用操作;
  6. //选择排序实现
  7. void select_sort(int a[],int &n)//n为数组a的元素个数
  8. {
  9. //进行N-1轮选择
  10. for(int i=1-1; i<n-1; i++)
  11. {
  12. int min = i;
  13. //找出第i小的数所在的位置
  14. for(int j=n-1-1; j>=i; j--)
  15. {
  16. if(a[j] < a[min])
  17. {
  18. min= j;
  19. }
  20. }
  21. //将第i小的数,放在第i个位置;如果刚好,就不用交换
  22. if( i != min)
  23. {
  24. int temp = a[i];
  25. a[i] = a[min];
  26. a[min] = temp;
  27. }
  28. }
  29. }
  30. int main()
  31. {
  32. int num[] = {89, 38, 11, 78, 96, 44, 19, 25};
  33. int N=sizeof(num)/sizeof(num[0]); //计算数组中元素的个数
  34. select_sort(num, N);
  35. for(int i=0; i<N; i++)
  36. cout<< num[i]<<endl;
  37. system("pause");
  38. return 0;
  39. }

注意:选择排序是一种不稳定的排序算法,可能会打乱两个相同数字的原有顺序。

例如,序列 5  8  5  2  9, 按照从小到大排序,第一轮会将第1个数字5会和2交换,那么原序列中2个5的相对前后顺序就被破坏了,所以选择排序是一种不稳定的排序算法。

C语言 简单选择排序算法相关推荐

  1. C语言实现选择排序——简单选择排序算法

    C语言实现简单选择排序 文章目录 C语言实现简单选择排序 简单选择排序算法 1.交换操作 2.简单选择排序算法实现 项目完整代码 运行效果图 简单选择排序算法 1.交换操作 //交换实现 void s ...

  2. python选择排序算法图解_简单选择排序算法(C语言详解版)

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

  3. 排序算法:简单选择排序算法实现及分析

    简单选择排序算法介绍 简单选择排序(Simple Selection Sort)就是通过n-1次关键字排序之间的比较,从n-i+1个记录中选择关键字最小的记录,并和第i(1<=i<=n)记 ...

  4. 简单选择排序算法 (JAVA)

    算法实现思想: 选择排序一共排序了n-1轮. for (int i = 0; i < arr.length - 1; i++) {} 定义变量min来记录每轮中需要比较序列中的最小数,变量min ...

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

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

  6. JAVA简单选择排序算法原理及实现

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

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

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

  8. C语言 简单选择排序法

    简单选择排序是指一种排序算法,在简单选择排序过程中,所需移动记录的次数比较少.最好情况下,即待排序记录初始状态就已经是正序排列了,则不需要移动记录. 一.基本思想 在要排序的一组数中,选出最小的一个数 ...

  9. C语言实现选择排序算法

    选择排序 算法步骤 1.从0索引开始,跟后面的元素一一比较 2.小的放前面,大的放后面 3.第一次循环结束后,最小的数据已经确定 4.第二次循环从一索引开始以此内推 整体代码块在最下方,有需要的可以复 ...

  10. 加标志量的选择排序算法c语言,置换选择排序算法详解(C语言实现)

    上一节介绍了增加 k-路归并排序中的 k 值来提高外部排序效率的方法,而除此之外,还有另外一条路可走,即减少初始归并段的个数,也就是本章第一节中提到的减小 m 的值. m 的求值方法为:m=⌈n/l⌉ ...

最新文章

  1. 2022-2028年中国体育赛事产业深度调研及投资前景预测报告
  2. 使用idea2.5建立maven项目
  3. C# IntPtr 与 string互转
  4. 深度学习框架YOLOv3的C++调用
  5. 系统性能调优(5)----Java循环与字符串代码优化
  6. Java黑皮书课后题第5章:*5.20(打印2到1000之间的素数)修改程序清单5-15,打印2到1000之间(包括2和1000)的所有素数。每1行显示8个素数,数字之间用一个空格字符隔开
  7. Matlab求重复数字的个数tabulate
  8. vantUI所有的弹出层组件(代码、调用、示例) - 集合篇
  9. android程序的建立,创建第一个Android程序 HelloWorld
  10. [JAVA] TicTacToe实现Socket通信(一)
  11. python基础教程之pymongo库
  12. iphone中各种文件路径
  13. 微信云托管云调用使用指南
  14. golang dep 导入报错问题
  15. 多路耦合器(有源分离器)在无线通讯中的应用
  16. 服务器空岛怎么修改地形,《迷你世界》2021空岛地形码如何输入 空岛地形码介绍...
  17. 2018年Android面试题含答案--适合中高级(上)
  18. sucess==happiness
  19. 惊闻“漫游成本只有一分钱”
  20. tf.keras.metrics.Accuracy;tf.keras.metrics.Precision;tf.keras.metrics.Recall

热门文章

  1. 吾有个怪习惯:看书时经常把ABC结构的词看成ACB
  2. C# 创建文件夹 Directory
  3. linux clone命令,【linux命令】git clone 用法说明
  4. java反编译能拿到源码吗_大牛带你解读Spring源码,编写自定义标签,您能学会吗?
  5. html图片分四面切割播,JS+CSS实现3D切割轮播图
  6. python 新闻热点_基于Python的新闻API调用代码实例
  7. 更改Linux Shell的提示符
  8. 深入理解 Android 消息机制原理
  9. netbeans-xdebug 断点调试php
  10. 字符与ascii的互转