从零开始学算法——选择排序
2015-12-15 18:43
309 查看
选择排序思想:(假设升序)找到最小的数和数组中第一个数交换,然后找次小的数和第二个数交换,然后找第三小的数和第三个数交换。。。。。一直找到第n-1个小的数和第n-1个数交换,排序结束。注意:只需要找n-1个数,不需要找n个数。因为找到前n-1个数,那么第n个数自然就是最大的那一个。
非升序排序:
最好情况运行时间:Θ(n²)
最坏情况运行时间:Θ(n²)
因为和原来数组排序无关,所以每次排序都会遍历剩余数组,所以最好与最坏情况时间复杂度都是Θ(n²)
非升序排序:
SELECTION-SORT(A) for i=1 to A.length-1 max = A[i] for j=i+1 to A.length if A[j]>max temp = max max = A[j] A[j] = temp A[i] = max
最好情况运行时间:Θ(n²)
最坏情况运行时间:Θ(n²)
因为和原来数组排序无关,所以每次排序都会遍历剩余数组,所以最好与最坏情况时间复杂度都是Θ(n²)
相关文章推荐
- 书评:《算法之美( Algorithms to Live By )》
- 动易2006序列号破解算法公布
- Ruby实现的矩阵连乘算法
- C#插入法排序算法实例分析
- 超大数据量存储常用数据库分表分库算法总结
- C#数据结构与算法揭秘二
- C#冒泡法排序算法实例分析
- 算法练习之从String.indexOf的模拟实现开始
- C#算法之关于大牛生小牛的问题
- C#实现的算24点游戏算法实例分析
- c语言实现的带通配符匹配算法
- 浅析STL中的常用算法
- 算法之排列算法与组合算法详解
- C++实现一维向量旋转算法
- Ruby实现的合并排序算法
- C#折半插入排序算法实现方法
- 基于C++实现的各种内部排序算法汇总
- C++线性时间的排序算法分析
- C++实现汉诺塔算法经典实例
- PHP实现克鲁斯卡尔算法实例解析