文章插图
上次给大家讲了三分钟快速记住冒泡排序算法,今天给大家讲讲选择排序算法,依然只用三分钟就可以快速记住,跟着我一起来吧!
上动画给 “6 5 4 3 2 1” 6个数字增序排序的流程
大体过程:
我们把一串待排序的数字分为已排序、和待排序的两类(当然,初始状态全都是待排序的) 。然后每一趟将待排序中的最小值和待排序中第1个元素交换,此时待排序中第1个元素就能归到已排序中 。将这个流程进行 6 趟就完成了排序 。
选择排序原理:
①、初始时在序列中找到最小(大)元素,放到序列的起始位置作为已排序序列
②、再从剩余未排序元素中继续寻找最小(大)元素,放到已排序序列的末尾
③、以此类推,直到所有元素均排序完毕 。
选择排序与冒泡排序区别:
选择排序是在剩下的待排序数字里面找个最小的再交换;冒泡排序是看见小的就交换 。
选择排序代码:
#include <cstdio>
/* 交换函数
* 传入:待交换两元素的地址 */
void swap(int *x, int *y) {
int temp = *x;
*x = *y;
*y = temp;
}
/* 增序的选择排序
* 传入:待排序数组a、数组元素个数n */
void selectSort(int a[], int n) {
/* 进行n趟操作 */
for(int i = 0; i < n; i++) {
int min_index = i; //记录待排序部分中最小值的下标
/* 扫描待排序部分,知道到最小值的下标 */
for(int j = i; j < n; j ++) {
if(a[j] < a[min_index])
min_index = j; //时刻更新最小值下标
}
swap(a + i,a + min_index); //交换 当前位 和 待排序部分中最小值
}
}
int main() {
int a[] = {5,2,3,4,15,16,100,23,88};
selectSort(a, 9);
for(int i = 0; i < 9; i++)
printf(“%d “, a[i]);
//输出结果:2 3 4 5 15 16 23 88 100
}
以上关于本文的内容,仅作参考!温馨提示:如遇健康、疾病相关的问题,请您及时就医或请专业人士给予相关指导!
「四川龙网」www.sichuanlong.com小编还为您精选了以下内容,希望对您有所帮助:- 情感咨询:相亲认识2个男生该如何选择
- 考研怎样选择学校 如何选择考研学校?
- 新奇!星座选择有氧健身
- 运动应该选择在饭前还是饭后
- 防癌要选择适合自身的锻炼项目和强度
- 男人快速增肌的营养选择
- 教你怎样选择佳楼层 1一32高楼层选佳楼层
- excel筛选重复数据并排序 按日期排序怎么设置
- 不同人群该如何正确选择健身路径
- 《小敏家》为何陈卓前妻李萍会选择跟他离婚呢