选择排序
选择排序是一种经典、简便的排序算法。在初级软件工程师的笔试面试中也经常出现 是基础入门的算法之一
原理讲解
Python实习
1 def selectionSort(arr, n): 2 for i in range(n): 3 min = i 4 for j in range(i+1, n): 5 if arr[j] < arr[min]: 6 min = j 7 8 if min != i: 9 arr[min], arr[i] = arr[i], arr[min] 10 11 12 if __name__ == '__main__': 13 # 将数组升序拍戏 14 # 1.将第一个元素作为min元素 在数组中第二个到最后的元素中找一个更小的元素 与min调换 15 # 2.第一个元素为数组最小元素 在第三个到最后元素中找最小元素与第二个元素替换 16 # 循环上一次步骤 至最后元素 得到排好序的数组 17 arr = [30, 40, 60, 50, 10, 20] 18 n = len(arr) 19 selectionSort(arr, n) 20 print(arr)
时间、空间复杂度、稳定性分析
选择排序的时间复杂度是O(n2) 当列表有序时 排序次数n-1次 O(n) 当列表倒序时 排序次数(n-1)(n-2)/2次 O(n2) 平均复杂度O(n2).
选择排序的空间复杂度是O(1) 期间没有涉及到新建列表 唯一需要新的内存是存储交换元素时 存放临时变量的内容。
选择排序是不稳定的排序 在有序表与无序表元素交换的过程中,会破坏相等元素的前后顺序 比如[5, 5, 3, 8, 9] 第一躺需要交换第一个5和3时 两个5的顺序就相反了
总结
总体来讲,和冒泡排序在效率性能上是极为相似的 不同是选择排序是不稳定的排序 也正因为如此 应用上冒泡排序占些优势。当对于初学算法的童鞋来讲 这些基本的排序都应该能够深入理解起原理才行。