📅  最后修改于: 2023-12-03 15:40:03.642000             🧑  作者: Mango
在计算机领域,数组排序是一种重要的基础算法。它可以将一个无序的数组按照特定的规则进行排序,使其变得有序。数组排序技术在算法设计、数据统计等领域都有广泛应用。
本文将介绍常见的数组排序算法,包括常见的时间复杂度、算法思想、代码示例以及优化方法等内容。
在实际开发中,常见的数组排序算法有很多种,包括:
下面分别介绍一下这些算法的时间复杂度、算法思想以及代码示例。
冒泡排序(Bubble Sort)是一种交换排序。它的基本思想是:两两比较相邻记录的关键字,如果反序则交换,知道没有反序为止。
冒泡排序的时间复杂度为 $O(n^2)$,是一种相对低效的排序方式。
代码示例如下:
def bubble_sort(arr):
n = len(arr)
for i in range(n):
for j in range(n-i-1):
if arr[j] > arr[j+1]:
arr[j], arr[j+1] = arr[j+1], arr[j]
return arr
插入排序(Insertion Sort)是一种简单直观的排序算法,其基本操作是将一个记录插入到已经排好序的有序序列中。
插入排序的时间复杂度为 $O(n^2)$。
代码示例如下:
def insertion_sort(arr):
n = len(arr)
for i in range(1, n):
key = arr[i]
j = i - 1
while j >= 0 and arr[j] > key:
arr[j+1] = arr[j]
j -= 1
arr[j+1] = key
return arr
选择排序(Selection Sort)是一种简单直观的排序算法,其基本操作是在未排序的数列中选择最小的元素,将其与左边的元素交换位置,知道全部排序完毕。
选择排序的时间复杂度为 $O(n^2)$。
代码示例如下:
def selection_sort(arr):
n = len(arr)
for i in range(n):
min_index = i
for j in range(i+1, n):
if arr[j] < arr[min_index]:
min_index = j
arr[i], arr[min_index] = arr[min_index], arr[i]
return arr
快速排序(Quick Sort)是一种轴点分治的排序算法,其基本思想是:选取一个轴点(pivot),通过一趟排序将待排记录分隔成独立的两部分,其中一部分的所有记录都比轴点小,另一部分的所有记录都比轴点大,之后递归的进行排序。
快速排序的时间复杂度为 $O(nlogn)$ ~ $O(n^2)$,在平均情况下表现最优。
代码示例如下:
def quick_sort(arr, low, high):
if low < high:
pivot = partition(arr, low, high)
quick_sort(arr, low, pivot-1)
quick_sort(arr, pivot+1, high)
return arr
def partition(arr, low, high):
pivot = arr[low]
while low < high:
while low < high and arr[high] >= pivot:
high -= 1
arr[low] = arr[high]
while low < high and arr[low] <= pivot:
low += 1
arr[high] = arr[low]
arr[low] = pivot
return low
归并排序(Merge Sort)是一种分治排序算法,其基本思想是:将待排记录分为若干组,将每组相邻的两个记录进行归并排序,最后形成有序序列。
归并排序的时间复杂度为 $O(nlogn)$。
代码示例如下:
def merge_sort(arr):
if len(arr) <= 1:
return arr
mid = len(arr) // 2
left = merge_sort(arr[:mid])
right = merge_sort(arr[mid:])
return merge(left, right)
def merge(left, right):
result = []
i, j = 0, 0
while i < len(left) and j < len(right):
if left[i] < right[j]:
result.append(left[i])
i += 1
else:
result.append(right[j])
j += 1
result += left[i:]
result += right[j:]
return result
堆排序(Heap Sort)是一种树形选择排序算法,其基本思想是:利用堆的性质进行排序,首先将数组构造为一个最大堆,然后将堆顶元素(即最大值)与末尾元素交换位置,然后调整堆到新的堆顶元素最大的位置,知道堆为空。
堆排序的时间复杂度为 $O(nlogn)$。
代码示例如下:
def heap_sort(arr):
n = len(arr)
for i in range(n//2, -1, -1):
heapify(arr, n, i)
for i in range(n-1, 0, -1):
arr[i], arr[0] = arr[0], arr[i]
heapify(arr, i, 0)
return arr
def heapify(arr, n, i):
largest = i
left = i * 2 + 1
right = i * 2 + 2
if left < n and arr[left] > arr[largest]:
largest = left
if right < n and arr[right] > arr[largest]:
largest = right
if largest != i:
arr[i], arr[largest] = arr[largest], arr[i]
heapify(arr, n, largest)
在实际开发中,数组排序也有很多优化的方法,包括:
以上方法都能够提高数组排序的效率和实现质量,具体实现可根据需求进行选择。