排序算法5——简单选择排序
来源:互联网 发布:c语言选择结构编程题 编辑:程序博客网 时间:2024/06/05 05:06
简单选择排序的平均复杂度为 \(O(n^2)\), 但效率通常比相同平均复杂度的直接插入排序还要差。但由于选择排序是 内部排序,因此在内存严格受限的情况下还是可以用的。
选择排序的原理很简单,如下图所示:
持续从未处理元素中找到最小值并加入到已排序列中。
黄色 表示已经排好序的子序列;蓝色表示当前处理项;红色表示当前最小值
c++实现代码如下:
#include <iostream>using namespace std;// 数据交换子函数void swap(int *data1, int *data2){ int temp = *data1; *data1 = *data2; *data2 = temp;}// 选择排序函数,输入数组data和数据个数nvoid selectSort(int data[], int n){ int i, j, min_idx; // 外层循环,依次处理每一个元素 for (i = 0; i < n-1; i++) { // 内层循环,从未处理元素中找到最小值位置 min_idx = i; for (j = i+1; j < n; j++) if (data[j] < data[min_idx]) min_idx = j; // 交换最小值 swap(&data[min_idx], &data[i]); }}// 打印数组void printarray(int data[], int n){ for (int i=0; i<n; i++) cout << data[i] << " ";}int main(){ int data[] = {12, 34, 54, 2, 3, 12, 27, 1}; int n = 8; cout << "data before shell sorting: \n"; printarray(data, n); selectSort(data, n); cout << "\ndata after shell sorting: \n"; printarray(data, n); return 0;}
选择排序是最容易分析的,因为完整的两层循环没有跳出,循环次数为 \(\frac{n(n-1)}{2}\)。
总结
通过将上面的程序和直接插入排序相比,显然前者的循环次数要高一些,即选择排序的效率甚至还要低于直接插入排序。 但是,又可以看出前者的数据交换次数明显更少,这对于一些写比读更耗时的设备是一个优点。
参考资料:
(1) WIKI: https://en.wikipedia.org/wiki/Selection_sort
1 0
- 排序算法之选择排序——简单选择排序
- 排序算法——简单选择排序
- 排序算法——简单选择排序
- 排序算法——简单选择排序
- 排序算法5——简单选择排序
- 算法之选择排序——简单选择排序
- 基础算法——简单选择排序
- 算法【5】:简单选择排序
- [排序算法,选择排序]--简单选择排序
- [排序算法5] - 简单选择排序
- 排序算法—选择排序
- 简单排序算法实现——选择排序
- 排序算法(一)——简单选择排序
- 排序算法(五)——简单选择排序
- 排序算法——简单选择排序(Python&Java)
- 排序算法——冒泡,简单选择排序
- 简单排序算法--选择排序
- 排序算法 简单选择排序
- VMware Windows Ubuntu16.04 共享文件 hdfs
- Android调用Camera,获取预览帧中的图像
- html + css 容器居中一例
- QQ18年,解密8亿月活的QQ后台服务接口隔离技术
- C#之导出excel
- 排序算法5——简单选择排序
- android--拍照,录像
- 微信开发之TortoiseSVN
- 扬帆起航
- 根据《RabbitMQ实战--高效部署分布式消息队列》这本书来具体总结下
- React核心内容归纳总结
- gradle-wrapper.properties中各属性的含义
- java的泛型回顾
- Android-拍照