经典排序之 选择排序
2016-03-24 21:01
204 查看
现在简单来讲一下选择排序的思想:
我们接触选择排序的时间很长了,也是我们编程时需要最先接触的程序。他的思想确实较简单。
算法思想:
选择排序需要针对数组从头到尾进行扫描,其实就是记录下扫描一遍后整个数组的最小元素和最小元素的位置,然后和第一个元素进行交换,这样经过一遍排序我们就可以确定一个元素的最终位置;然后从第二个数据开始再次循环扫描交换,直到最后;在这里交换时有一个优化的过程,如果最小元素的位置和之前记录的位置一样,则可以通过比较,避免无谓的交换,节省时间和空间。
选择排序是一个不稳定的排序,最好最坏和平均下来的时间复杂度都是O(n2);
算法实现:
我们接触选择排序的时间很长了,也是我们编程时需要最先接触的程序。他的思想确实较简单。
算法思想:
选择排序需要针对数组从头到尾进行扫描,其实就是记录下扫描一遍后整个数组的最小元素和最小元素的位置,然后和第一个元素进行交换,这样经过一遍排序我们就可以确定一个元素的最终位置;然后从第二个数据开始再次循环扫描交换,直到最后;在这里交换时有一个优化的过程,如果最小元素的位置和之前记录的位置一样,则可以通过比较,避免无谓的交换,节省时间和空间。
选择排序是一个不稳定的排序,最好最坏和平均下来的时间复杂度都是O(n2);
算法实现:
#include<iostream> using namespace std; void swap(int &a, int &b){ int temp = a; a = b; b = temp; } void selectSort(int *data, int length){ if(data == NULL || length < 0){ return; } for(int i = 0; i < length - 1; i++){ int value = data[i]; int index = i; for(int j = i + 1; j < length; j++){ if(data[j] < value){ value = data[j]; //记录每一次的最小值 index = j; //记录每一次的索最小值索引 } } if(index == i){ //简单优化 continue; } swap(data[i], data[index]); //交换阶段 } } int main(){ //测试代码 int str[] = {34, 23, 4, 78, 1, 0, 45, 9, 33, 6, 234}; int len = sizeof(str) / sizeof(int); selectSort(str, len); for(int k = 0; k < len; k++){ cout<< str[k]<< ' '; } return 0; }
相关文章推荐
- Nyoj 天下第一(spfa)
- MYSQL ERROR CODE 错误编号的意义
- 1.7-Redis介绍和安装
- 仿微信语音功能的流程
- dfsfa
- Node.js基础学习之常见API理解
- 二叉树查找、匹配字符串、快速排序
- 刘钦哥哥的金句
- hdu_2668 Daydream O(n)求最长不重复子串
- 如何配置Apache虚拟主机?(基于IP、基于端口、基于域名)
- Java的访问权限控制及package出现的原因及好处
- springmvc中返回页面,只在iframe中跳转,而不是整个页面,解决方法。
- poj-1845-Sumdiv
- 对理想团队模式构建的设想及对软件流程的理解
- iOS开发之滤镜 滤镜链 保存到本地相册 以及学习滤镜的诀窍
- 【EJB学习笔记】——远程调用和本地调用
- 【Python】基于Celery的分布式应用
- 对理想团队模式的设想
- 南阳理工oj6题
- 关于sort与stable_sort的初级用法