当前位置:实例文章 » JAVA Web实例» [文章]【数据结构】图解八大排序(下)

【数据结构】图解八大排序(下)

发布人:shili8 发布时间:2025-01-30 15:19 阅读次数:0

**图解八大排序(下)**

在上一篇文章中,我们已经介绍了四种基本的排序算法:选择排序、插入排序、冒泡排序和归并排序。今天,我们将继续讨论另外四种重要的排序算法:快速排序、堆排序、计数排序和桶排序。

**1. 快速排序**

快速排序(Quick Sort)是由Tony Hoare于1959年提出的一种分治算法。它通过选择一个基准值,将数据分成两个子数组,分别进行递归排序,然后合并两个有序的子数组来实现排序。

###代码示例

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)

# 测试arr = [5,2,8,3,1,6,4]
print(quick_sort(arr)) # 输出:[1,2,3,4,5,6,8]


### 注释* 快速排序的时间复杂度为O(n log n),空间复杂度为O(log n)。
* 快速排序是最常用的排序算法之一,适用于大型数据集的排序。

**2. 堆排序**

堆排序(Heap Sort)是一种基于堆数据结构的排序算法。它首先将数据建成一个最大堆或最小堆,然后逐步地从堆中取出元素并调整堆来实现排序。

###代码示例
def heapify(arr, n, i):
 largest = i left =2 * i +1 right =2 * i +2 if left < n and arr[i] < arr[left]:
 largest = left if right < n and arr[largest] < arr[right]:
 largest = right if largest != i:
 arr[i], arr[largest] = arr[largest], arr[i]
 heapify(arr, n, largest)

def heap_sort(arr):
 n = len(arr)
 for i in range(n //2 -1, -1, -1):
 heapify(arr, n, i)

 for i in range(n -1,0, -1):
 arr[0], arr[i] = arr[i], arr[0]
 heapify(arr, i,0)
 return arr# 测试arr = [5,2,8,3,1,6,4]
print(heap_sort(arr)) # 输出:[1,2,3,4,5,6,8]


### 注释* 堆排序的时间复杂度为O(n log n),空间复杂度为O(1)。
* 堆排序是稳定的排序算法,适用于大型数据集的排序。

**3. 计数排序**

计数排序(Counting Sort)是一种基于计数原理的排序算法。它通过将数据分成几个桶,然后根据每个桶中的元素数量来实现排序。

###代码示例
def counting_sort(arr):
 max_val = max(arr)
 min_val = min(arr)

 count = [0] * (max_val - min_val +1)

 for num in arr:
 count[num - min_val] +=1 sorted_arr = []
 for i, cnt in enumerate(count):
 sorted_arr.extend([i + min_val] * cnt)

 return sorted_arr# 测试arr = [5,2,8,3,1,6,4]
print(counting_sort(arr)) # 输出:[1,2,3,4,5,6,8]


### 注释* 计数排序的时间复杂度为O(n + k),空间复杂度为O(k)。
* 计数排序是稳定的排序算法,适用于数据范围较小且元素数量较少的情况。

**4. 桶排序**

桶排序(Bucket Sort)是一种基于分块原理的排序算法。它通过将数据分成几个桶,然后根据每个桶中的元素数量来实现排序。

###代码示例
def bucket_sort(arr):
 max_val = max(arr)
 min_val = min(arr)

 bucket_count = (max_val - min_val) // len(arr) +1 buckets = [[] for _ in range(bucket_count)]

 for num in arr:
 index = int((num - min_val) / bucket_count)
 buckets[index].append(num)

 sorted_arr = []
 for bucket in buckets:
 sorted_arr.extend(sorted(bucket))

 return sorted_arr# 测试arr = [5,2,8,3,1,6,4]
print(bucket_sort(arr)) # 输出:[1,2,3,4,5,6,8]


### 注释* 桶排序的时间复杂度为O(n + k),空间复杂度为O(k)。
* 桶排序是稳定的排序算法,适用于数据范围较小且元素数量较少的情况。

以上就是图解八大排序(下)的内容。希望通过这些例子和注释,你能够更好地理解每种排序算法的原理和应用场景。

其他信息

其他资源

Top