首先讲解的网上很多,我直接上python代码
注意下表是平均时间,笔试面试可能会问最好最坏
排序算法 | 平均时间复杂度 |
---|---|
冒泡排序 | O(n2) |
选择排序 | O(n2) |
插入排序 | O(n2) |
希尔排序 | O(n1.5) |
快速排序 | O(N*logN) |
归并排序 | O(N*logN) |
堆排序 | O(N*logN) |
基数排序 | O(d(n+r)) |
1、冒泡排序
-
基本思想:两个数比较大小,较大的数下沉,较小的数冒起来。
-
过程:
- 比较相邻的两个数据,如果第二个数小,就交换位置。
- 从后向前两两比较,一直到比较最前两个数据。最终最小数被交换到起始的位置,这样第一个最小数的位置就排好了。
- 继续重复上述过程,依次将第2.3...n-1个最小数排好位置。
-
平均时间复杂度:O(n2)
def bubblesort(seq):
for i in range(len(seq)):
for j in range(len(seq) - 1, i, -1):
if seq[j] < seq[j - 1]:
seq[j - 1], seq[j] = seq[j], seq[j - 1]
return seq
s = [4, 6, 2, 5, 7, 9, 8, 1]
bubblesort(s)
print(s)
2、选择排序
-
基本思想:
在长度为N的无序数组中,第一次遍历n-1个数,找到最小的数值与第一个元素交换;
第二次遍历n-2个数,找到最小的数值与第二个元素交换;
。。。
第n-1次遍历,找到最小的数值与第n-1个元素交换,排序完成。 -
过程:
-
平均时间复杂度:O(n2)
def selectsort(seq):
for fillslot in range(len(seq)-1,0,-1):
pos = 0
for loc in range(1,fillslot):
if seq