面试题答案
一键面试冒泡排序
def bubble_sort(arr):
n = len(arr)
for i in range(n - 1):
for j in range(0, n - i - 1):
if arr[j] > arr[j + 1] :
arr[j], arr[j + 1] = arr[j + 1], arr[j]
return arr
时间复杂度:平均和最坏情况为 $O(n^2)$,最好情况为 $O(n)$。
快速排序
def quick_sort(arr):
if len(arr) <= 1:
return arr
pivot = arr[len(arr) // 2]
left = [x for x in arr if x < pivot]
middle = [x for x in arr if x == pivot]
right = [x for x in arr if x > pivot]
return quick_sort(left) + middle + quick_sort(right)
时间复杂度:平均情况为 $O(nlogn)$,最坏情况为 $O(n^2)$。
算法选择建议
- 小规模数据:冒泡排序实现简单,代码量少,可优先选择。但如果对时间复杂度有要求,即使数据规模小,快速排序平均性能更好。
- 大规模数据:快速排序平均性能优秀,通常选择快速排序。但如果数据几乎有序,冒泡排序最好情况的时间复杂度 $O(n)$ 会更具优势。如果数据分布极端,可能会使快速排序达到最坏时间复杂度,此时可以考虑其他稳定排序算法如归并排序等。