简单选择排序
2015-03-07 00:25
661 查看
一、基本思想:每一趟循环遍历都从待排序的记录中选出关键字最小的记录,顺序的放在已排好序的子表的最后,直到所有的记录排序完毕。
二、C 语言代码:
三、算法分析
时间复杂度:由算法代码可知,简单选择排序是由两重循环组成,对于 n 个排序记录而言,外层必须经历 n-1 次循环,而内层则必须经历 (n-1-i) 次循环,其中 0 ≦ i ≦ n-1,并且每一次比较如需要交换记录排序位置都必须移动记录三次才能达到目的。故对于简单选择排序而言:
关键字比较和记录移动的最少次数是 (n-1)(n-i-1),其中 0 ≦ i ≦ n-1,算法的时间复杂度为 O(n²)。
关键字比较和记录移动的最多次数为 (n-1)[3(n-i-1)],其中 0 ≦ i ≦ n-1,算法的时间复杂度为 O(n²)。
关键字平均比较和记录移动次数为 (n-1)(n-i-1),其中 0 ≦ i ≦ n-1,算法的时间复杂度为 O(n²)。
空间复杂度:由算法代码可知,所需的额外空间只有一个 tmp 变量,故简单选择排序算法空间复杂度为 O(1)。
四、思考
简单选择排序算法的思想非常简单,但是效率非常低下,实际工程中应用很少,请问该如何优化算法?
二、C 语言代码:
三、算法分析
时间复杂度:由算法代码可知,简单选择排序是由两重循环组成,对于 n 个排序记录而言,外层必须经历 n-1 次循环,而内层则必须经历 (n-1-i) 次循环,其中 0 ≦ i ≦ n-1,并且每一次比较如需要交换记录排序位置都必须移动记录三次才能达到目的。故对于简单选择排序而言:
关键字比较和记录移动的最少次数是 (n-1)(n-i-1),其中 0 ≦ i ≦ n-1,算法的时间复杂度为 O(n²)。
关键字比较和记录移动的最多次数为 (n-1)[3(n-i-1)],其中 0 ≦ i ≦ n-1,算法的时间复杂度为 O(n²)。
关键字平均比较和记录移动次数为 (n-1)(n-i-1),其中 0 ≦ i ≦ n-1,算法的时间复杂度为 O(n²)。
空间复杂度:由算法代码可知,所需的额外空间只有一个 tmp 变量,故简单选择排序算法空间复杂度为 O(1)。
四、思考
简单选择排序算法的思想非常简单,但是效率非常低下,实际工程中应用很少,请问该如何优化算法?
相关文章推荐
- C语言实现 排序源程序(包括直接插入、希尔、冒泡、快速、简单选择、堆排序)
- C#简单选择排序
- 程序员必知的8大排序(二)-------简单选择排序,堆排序(java实现)
- PHP算法学习之“简单的选择排序“
- 简单的选择排序
- 简单选择排序
- 简单选择排序的实现
- 排序算法-------简单选择排序
- 简单选择排序
- 选择排序的简单事例 .
- 数据结构之排序算法一冒泡排序,直接插入排序,简单选择排序
- 简单选择则排序
- 选择排序1-简单选择排序
- 简单选择排序
- (10)选择排序之一 简单选择排序
- 简单选择排序的算法实现
- 常用算法总结之排序(五)----简单选择排序
- 我---对‘数据结构’中‘排序’的理解 ---------2:选择排序--(一)简单选择排序
- 选择排序的简单事例
- 冒泡,插入,折半插入,希尔,快速,简单选择排序的源代码总结