几种排序算法学习总结:从冒泡排序到快速排序
n = len(arr)for i in range(n):arr[j]该方法时间复杂度为O(n^2),def insertion_sort(arr):
作为计算机科学中最基础的算法之一,排序算法是每个程序员必须掌握的技能之一。在实际开发中,我们需要对数据进行处理和分析,而这些数据往往是无序的。因此,我们必须使用排序算法将其转换为有序列表。
本文将介绍几种常见的排序算法,并对它们进行比较和总结。
1. 冒泡排序
冒泡排序是最简单、最容易理解的一种排序方法。它通过相邻元素之间两两比较来确定元素位置。具体实现如下:
“`
def bubble_sort(arr):
n = len(arr)
for i in range(n):
for j in range(0, n-i-1):
if arr[j] > arr[j+1]:
arr[j], arr[j+1] = arr[j+1], arr[j]
该方法时间复杂度为O(n^2),并且在数据量较大时会变得非常慢。
2. 插入排序
插入排序同样使用了相邻元素之间的比较来确定位置,但它与冒泡不同在于:它每次只交换一个元素,并且遇到已经排好序列时便停止。
def insertion_sort(arr):
for i in range(1, n):
key = arr[i]
j = i – 1
while j >= 0 and key < arr[j] :
arr[j+1] = arr[j]
j -= 1
arr[j+1] = key
![几种排序算法学习总结:从冒泡排序到快速排序缩略图 几种排序算法学习总结:从冒泡排序到快速排序](https://www.72715.net/wp-content/uploads/2023/05/65e452c26363da1920fea3e4d2cef3d5.png)
插入排序的时间复杂度也为O(n^2),但由于它在遇到已排好序列时能够停止,因此效率稍微高一些。
3. 快速排序
快速排序是最常用、最优秀的一种排序算法。它基于分治思想,通过将数据划分为较小和较大的两个子集来逐步递归地进行排序。
具体实现如下:
def quick_sort(arr, low, high):
if low < high:
pi = partition(arr, low, high)
quick_sort(arr, low, pi-1)
quick_sort(arr, pi+1, high)
def partition(arr, low, high):
i = (low-1)
pivot = arr[high]
for j in range(low , high):
if arr[j] <= pivot:
i += 1
arr[i],arr[j] = arr[j],arr[i]
arr[i+1],arr[high] = arr[high],arr[i+1]
return (i+1)
快速排序的时间复杂度为O(nlogn),效率极高。但是,在处理大量重复元素时,它的效率会变得很低。
以上三种排序算法是最常见、最基础的一些方法。当然,对于不同数据集和不同需求,还有其他更为优秀的排序算法。比如归并排序、堆排序等。
但无论使用哪种算法,我们都需要注意时间复杂度和空间复杂度,并且在实际开发中根据具体情况进行选择。