八大排序算法(3) 简单选择排序
来源:互联网 发布:百度贴吧和天涯知乎 编辑:程序博客网 时间:2024/06/04 13:24
基本思路
每次选出剩余序列中最小/最大的数、与剩余序列的第一个交换位置。
示例:
// 升序,左起/*初始值*/ 10, 7, 1, 8, 5, 12, 6, 3, 9/*第1趟*/ 1, 7, 10, 8, 5, 12, 6, 3, 9/*第2趟*/ 1, 3, 10, 8, 5, 12, 6, 7, 9/*第3趟*/ 1, 3, 5, 8, 10, 12, 6, 7, 9/*第4趟*/ 1, 3, 5, 6, 10, 12, 8, 7, 9/*第5趟*/ 1, 3, 5, 6, 7, 12, 8, 10, 9/*第6趟*/ 1, 3, 5, 6, 7, 8, 12, 10, 9/*第7趟*/ 1, 3, 5, 6, 7, 8, 9, 10, 12/*第8趟*/ 1, 3, 5, 6, 7, 8, 9, 10, 12/*第9趟*/ 1, 3, 5, 6, 7, 8, 9, 10, 12
代码
void printList(int *l, int n) { for (int i = 0; i < n; i++) { printf("%d ", l[i]); } printf("\n");}int main() { int list[50] = { 10, 7, 1 , 8, 5, 12, 6, 3, 9}; printList(list, 9); // 简单选择排序,每次选取最小的放最前面 for (int i = 0; i < 9; i++ ) { int minIndex = i; for (int j = i+1; j < 9; j++){ if ( list[j] < list[minIndex]){ // 替换最小值的 index minIndex = j; } } int k = list[i]; list[i] = list[minIndex]; list[minIndex] = k; printList(list, 9); } system("pause"); return 0;}
进阶 – 二元选择排序
简单选择排序每次循环只选出了一个数, 二元选择排序则同时选出最大最小的元素。
这样外循环只需要 n/2 次就能得到结果。
示例:
// 升序,二选选择排序/*初始值*/ 10, 7, 1, 8, 5, 12, 6, 3, 9/*第1趟*/ 1, 7, 10, 8, 5, 9, 6, 3, 12/*第2趟*/ 1, 3, 7, 8, 5, 9, 6, 10, 12/*第3趟*/ 1, 3, 5, 8, 7, 6, 9, 10, 12/*第4趟*/ 1, 3, 5, 6, 7, 8, 9, 10, 12
代码
int main() { int list[50] = { 10, 7, 1 , 8, 5, 12, 6, 3, 9}; printList(list, 9); // 二元选择排序,每次选取最小的放最前面,选最大的放后面 for (int i = 0; i < 9 / 2; i++) { int minIndex = i; int maxIndex = i; for (int j = i+1; j < 9 - i; j++){ if ( list[j] < list[minIndex] ){ minIndex = j; // 找出最小 } else if ( list[j] > list[maxIndex] ){ maxIndex = j; // 找出最大 } } if ( i != minIndex ){ int k = list[i]; list[i] = list[minIndex]; list[minIndex] = k; } // 要特别留意 maxIndex == i 的时候,i 可能会被换掉 if ( maxIndex == i ){ maxIndex = minIndex; } int m = list[9 - i - 1]; list[9 - i - 1] = list[maxIndex]; list[maxIndex] = m; printList(list, 9); }system("pause");return 0;}
以上
原文链接 http://blog.csdn.net/u011546766/article/details/74024935
阅读全文
0 0
- 八大排序算法(3) 简单选择排序
- 八大排序算法-简单选择排序
- 八大排序算法之简单选择排序
- 八大排序算法-简单选择排序
- 八大排序算法(三)简单选择排序
- 八大排序--简单选择排序
- 八大排序算法总结之二(简单选择算法,堆排序,归并排序,基数排序)
- 八大排序算法总结之二(简单选择算法,堆排序,归并排序,基数排序)
- 八大排序算法之简单选择排序法
- 排序算法(3)-简单选择排序
- 八大排序算法之三简单选择排序(c语言)
- 八大排序算法(四) 直接选择排序
- 八大排序算法之(四)选择排序
- 八大排序算法之选择排序
- 八大排序算法之选择排序
- 八大排序算法之二元选择排序
- 八大排序算法之直接选择排序
- 八大排序算法--直接选择排序
- Subarray Sum Closest
- MTK平台修改imgsensor的hal代码后快速编译
- 互斥体_创建4线程_打印
- 八大基本排序算法 序
- HDFS集群搭建,高可用双机热备模式(HA)自动切换,hdfs+zookeeper+journalnode,步骤分步原理详解(适合初学者)
- 八大排序算法(3) 简单选择排序
- 八大排序算法(1) 插入排序
- 拓展欧几里得算法
- DBCP连接池
- Longest Substring Without Repeating Characters (leetcode3)
- Wifi相关----WifiConfiguration+ScanResult
- EditText maxLines不工作
- Add Two Numbers (leetcode2)
- Intent传递对象的两种方法 && Parcelable AS插件 [U02]