C语言 简单选择排序算法
基本思想及举例说明
简单 选择排序(从小到大)的基本思想是,首先,选出最小的数,放在第一个位置;然后,选出第二小的数,放在第二个位置;以此类推,直到所有的数从小到大排序。
在实现上,我们通常是先确定第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语言实现。
- #include<stdio.h>
- #include<stdlib.h>
- #include <iostream>
- using namespace std;
- void select_sort(int a[],int &n); //采用c++中的引用操作;
- //选择排序实现
- void select_sort(int a[],int &n)//n为数组a的元素个数
- {
- //进行N-1轮选择
- for(int i=1-1; i<n-1; i++)
- {
- int min = i;
- //找出第i小的数所在的位置
- for(int j=n-1-1; j>=i; j--)
- {
- if(a[j] < a[min])
- {
- min= j;
- }
- }
- //将第i小的数,放在第i个位置;如果刚好,就不用交换
- if( i != min)
- {
- int temp = a[i];
- a[i] = a[min];
- a[min] = temp;
- }
- }
- }
- int main()
- {
- int num[] = {89, 38, 11, 78, 96, 44, 19, 25};
- int N=sizeof(num)/sizeof(num[0]); //计算数组中元素的个数
- select_sort(num, N);
- for(int i=0; i<N; i++)
- cout<< num[i]<<endl;
- system("pause");
- return 0;
- }
注意:选择排序是一种不稳定的排序算法,可能会打乱两个相同数字的原有顺序。
例如,序列 5 8 5 2 9, 按照从小到大排序,第一轮会将第1个数字5会和2交换,那么原序列中2个5的相对前后顺序就被破坏了,所以选择排序是一种不稳定的排序算法。
C语言 简单选择排序算法相关推荐
- C语言实现选择排序——简单选择排序算法
C语言实现简单选择排序 文章目录 C语言实现简单选择排序 简单选择排序算法 1.交换操作 2.简单选择排序算法实现 项目完整代码 运行效果图 简单选择排序算法 1.交换操作 //交换实现 void s ...
- python选择排序算法图解_简单选择排序算法(C语言详解版)
该算法的实现思想为:对于具有 n 个记录的无序表遍历 n-1 次,第 i 次从无序表中第 i 个记录开始,找出后序关键字中最小的记录,然后放置在第 i 的位置上. 例如对无序表{56,12,80,91 ...
- 排序算法:简单选择排序算法实现及分析
简单选择排序算法介绍 简单选择排序(Simple Selection Sort)就是通过n-1次关键字排序之间的比较,从n-i+1个记录中选择关键字最小的记录,并和第i(1<=i<=n)记 ...
- 简单选择排序算法 (JAVA)
算法实现思想: 选择排序一共排序了n-1轮. for (int i = 0; i < arr.length - 1; i++) {} 定义变量min来记录每轮中需要比较序列中的最小数,变量min ...
- java 排序原理_简单选择排序算法原理及java实现(超详细)
简单选择排序的原理 简单选择排序的原理非常简单,即在待排序的数列中寻找最大(或者最小)的一个数,与第 1 个元素进行交换,接着在剩余的待排序的数列中继续找最大(最小)的一个数,与第 2 个元素交换.以 ...
- JAVA简单选择排序算法原理及实现
简单选择排序:(选出最小值,放在第一位,然后第一位向后推移,如此循环)第一位与后面每一个逐个比较,每次都使最小的置顶,第一位向后推进(即刚选定的第一位是最小值,不再参与比较,比较次数减1) 复杂度: ...
- 选择排序java代码_JAVA简单选择排序算法原理及实现
简单选择排序:(选出最小值,放在第一位,然后第一位向后推移,如此循环)第一位与后面每一个逐个比较,每次都使最小的置顶,第一位向后推进(即刚选定的第一位是最小值,不再参与比较,比较次数减1) 复杂度: ...
- C语言 简单选择排序法
简单选择排序是指一种排序算法,在简单选择排序过程中,所需移动记录的次数比较少.最好情况下,即待排序记录初始状态就已经是正序排列了,则不需要移动记录. 一.基本思想 在要排序的一组数中,选出最小的一个数 ...
- C语言实现选择排序算法
选择排序 算法步骤 1.从0索引开始,跟后面的元素一一比较 2.小的放前面,大的放后面 3.第一次循环结束后,最小的数据已经确定 4.第二次循环从一索引开始以此内推 整体代码块在最下方,有需要的可以复 ...
- 加标志量的选择排序算法c语言,置换选择排序算法详解(C语言实现)
上一节介绍了增加 k-路归并排序中的 k 值来提高外部排序效率的方法,而除此之外,还有另外一条路可走,即减少初始归并段的个数,也就是本章第一节中提到的减小 m 的值. m 的求值方法为:m=⌈n/l⌉ ...
最新文章
- 2022-2028年中国体育赛事产业深度调研及投资前景预测报告
- 使用idea2.5建立maven项目
- C# IntPtr 与 string互转
- 深度学习框架YOLOv3的C++调用
- 系统性能调优(5)----Java循环与字符串代码优化
- Java黑皮书课后题第5章:*5.20(打印2到1000之间的素数)修改程序清单5-15,打印2到1000之间(包括2和1000)的所有素数。每1行显示8个素数,数字之间用一个空格字符隔开
- Matlab求重复数字的个数tabulate
- vantUI所有的弹出层组件(代码、调用、示例) - 集合篇
- android程序的建立,创建第一个Android程序 HelloWorld
- [JAVA] TicTacToe实现Socket通信(一)
- python基础教程之pymongo库
- iphone中各种文件路径
- 微信云托管云调用使用指南
- golang dep 导入报错问题
- 多路耦合器(有源分离器)在无线通讯中的应用
- 服务器空岛怎么修改地形,《迷你世界》2021空岛地形码如何输入 空岛地形码介绍...
- 2018年Android面试题含答案--适合中高级(上)
- sucess==happiness
- 惊闻“漫游成本只有一分钱”
- tf.keras.metrics.Accuracy;tf.keras.metrics.Precision;tf.keras.metrics.Recall