选择排序法
来源:互联网 发布:三维点云数据曲面拟合 编辑:程序博客网 时间:2024/04/29 19:41
1. 算法思路
冒泡法的每一趟,都通过两两互换,把最大值冒到了序列尾部。由于程序中赋值语句消耗的时间是最多的,这种每次两两互换消耗了不少的时间。
所以引入选择排序法,和冒泡法一样,都是每一趟找出最大值(或最小值),然而并不是通过两两互换的方式,而是把临时最大值所在的位置记录在一个变量中,然后剩余的元素依次和这个临时最大值比较:
你比我大,那临时最大值的位置就交给你;你没我大,那就下一个再和我比。
这样一趟后,我们就知道了最大值的位置。然后,将最大值元素和尾部元素互换(也可以最小值和首部元素互换),这样一趟一下只用互换一次。最后,进行length-1趟后,就排序成功啦。
2. 核心代码
int selectionSort(int *data, unsigned int length){ if (data == NULL) { return -1; } //遍历 for (int traverse_i = 0; traverse_i < length-1; traverse_i++)//只需把前length-1个最小值放在数组前面就排序成功了 { //比较得出目前最小值所在的位置 int minDataNum = traverse_i; for (int compare_j = traverse_i+1; compare_j < length; compare_j++) if (data[compare_j]<data[minDataNum]) minDataNum = compare_j; //和数组开头交换 if (minDataNum!=traverse_i) { int temp; temp = data[minDataNum]; data[minDataNum] = data[traverse_i]; data[traverse_i] = temp; } } return 0;}
3. Test程序
#include<iostream>#include<string>using namespace std;int selectionSort(int *data, unsigned int length);void main(void){ int array[10] = {9,8,7,6,5,4,3,2,1,0}; int num = 10; //step1: 遍历数组,输出初始排列 for (int arN = 0; arN < num; arN++) { cout << array[arN]<<' '; } cout << endl; //step2: 插入排序 selectionSort(array, num); //step3: 遍历数组,输出排序后结果 for (int arN = 0; arN < num; arN++) { cout << array[arN]<<' '; }}int selectionSort(int *data, unsigned int length){ if (data == NULL) { return -1; } //遍历 for (int traverse_i = 0; traverse_i < length-1; traverse_i++)//只需把前length-1个最小值放在数组前面就排序成功了 { //比较得出目前最小值所在的位置 int minDataNum = traverse_i; for (int compare_j = traverse_i+1; compare_j < length; compare_j++) if (data[compare_j]<data[minDataNum]) minDataNum = compare_j; //和数组开头交换 if (minDataNum!=traverse_i) { int temp; temp = data[minDataNum]; data[minDataNum] = data[traverse_i]; data[traverse_i] = temp; } } return 0;}
运行结果:
1 0
- 常用排序-选择法排序
- 常见排序-选择法排序
- 排序算法--选择排序法
- 按选择排序法排序。
- 排序模板 选择法排序
- 排序算法--选择排序法
- 排序之选择排序法
- 选择排序法法
- 排序:选择法
- 选择排序法
- 选择法排序
- 选择排序法
- 选择排序法证明
- 选择排序法
- 选择排序法
- 选择排序法
- 选择排序法
- C++ 选择排序法
- iOS 问题收集及处理 (弃用方法收集)持续更新中(warning,errors)
- m站设置锚点跳转到指定位置
- iOS-Core-Animation-Advanced-Techniques(四)
- UVA 1329——Corporative Network
- android mediaplayer相关
- 选择排序法
- 什么是泛域名解析
- iOS开发之iOS与js的交互
- 快速掌握Lua 5.3 —— 从Lua中调用C函数
- springMVC—接受参数以及返回参数
- 30套css后台模板,easyui,jquery 网站
- 微信公众帐号开发教程第9篇-解析接口中的消息创建时间CreateTime
- LeetCode 147. Insertion Sort List
- 3823: 定情信物【递推】【线性筛逆元】【带推导过程】