当前位置:实例文章 » JAVA Web实例» [文章]排序【数据结构】

排序【数据结构】

发布人:shili8 发布时间:2025-01-11 03:52 阅读次数:0

**排序算法**

排序是一种常见的计算机科学概念,它涉及将一个未排序的集合(如列表或数组)重新排列为按某种顺序有序的集合。排序是许多应用程序中的关键组件,例如数据库管理系统、文件系统和图形用户界面。

在本文中,我们将讨论各种排序算法及其时间复杂度。我们还将提供一些示例代码,以帮助理解这些算法。

**1.选择排序**

选择排序是一种简单的排序算法,它通过反复遍历列表来找到最小或最大元素,并将其放在正确的位置。

**选择排序算法步骤:**

1. 初始化一个变量 `min_index`,用来存储当前最小元素的索引。
2. 遍历列表,从第一个元素开始到最后一个元素结束。
3. 在每个元素之后,比较该元素与当前最小元素(即 `min_index` 对应的元素),并更新 `min_index` 如果发现更小的元素。
4. 将 `min_index` 对应的元素交换到列表的第一个位置。
5. 重复步骤2-4,直到列表中所有元素都被排序。

**选择排序示例代码(Python):**

def selection_sort(arr):
 n = len(arr)
 for i in range(n -1):
 min_index = i for j in range(i +1, n):
 if arr[j] < arr[min_index]:
 min_index = j # Swap elements at indices i and min_index arr[i], arr[min_index] = arr[min_index], arr[i]
 return arr# Test the functionarr = [64,34,25,12,22,11,90]
print("Original array:", arr)
sorted_arr = selection_sort(arr)
print("Sorted array:", sorted_arr)

**时间复杂度:**

选择排序的时间复杂度为 O(n^2),其中 n 是列表中的元素数量。

**2. 插入排序**

插入排序是一种简单的排序算法,它通过反复遍历列表来将每个元素插入到正确的位置。

**插入排序算法步骤:**

1. 初始化一个变量 `i`,用来存储当前正在处理的元素。
2. 从第二个元素开始(即索引为1 的元素),遍历列表。
3. 对于每个元素,将其与前面的元素进行比较,如果它小于前面的元素,则将其插入到正确的位置。
4. 重复步骤2-3,直到列表中所有元素都被排序。

**插入排序示例代码(Python):**
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# Test the functionarr = [64,34,25,12,22,11,90]
print("Original array:", arr)
sorted_arr = insertion_sort(arr)
print("Sorted array:", sorted_arr)

**时间复杂度:**

插入排序的时间复杂度为 O(n^2),其中 n 是列表中的元素数量。

**3. 归并排序**

归并排序是一种分治算法,它通过将列表分成两个子列表,然后对每个子列表进行排序,最后合并两个有序子列表来得到最终的有序列表。

**归并排序算法步骤:**

1. 如果列表中只有一个元素,则返回该元素(因为它已经是有序的)。
2. 将列表分成两个子列表。
3. 对每个子列表进行排序(递归地调用归并排序函数)。
4. 合并两个有序子列表。

**归并排序示例代码(Python):**
def merge_sort(arr):
 if len(arr) <=1:
 return arr mid = len(arr) //2 left_half = arr[:mid]
 right_half = arr[mid:]
 left_half = merge_sort(left_half)
 right_half = merge_sort(right_half)
 return merge(left_half, right_half)

def merge(left, right):
 merged = []
 while left and right:
 if left[0] <= right[0]:
 merged.append(left.pop(0))
 else:
 merged.append(right.pop(0))
 merged.extend(left or right)
 return merged# Test the functionarr = [64,34,25,12,22,11,90]
print("Original array:", arr)
sorted_arr = merge_sort(arr)
print("Sorted array:", sorted_arr)

**时间复杂度:**

归并排序的时间复杂度为 O(n log n),其中 n 是列表中的元素数量。

**4. 快速排序**

快速排序是一种分治算法,它通过选择一个“基准”元素,然后将列表分成两个子列表(一部分小于基准,另一部分大于基准),最后对每个子列表进行排序。

**快速排序算法步骤:**

1.选择一个基准元素。
2. 将列表分成两个子列表,一部分小于基准,另一部分大于基准。
3. 对每个子列表进行排序(递归地调用快速排序函数)。

**快速排序示例代码(Python):**
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)

# Test the functionarr = [64,34,25,12,22,11,90]
print("Original array:", arr)
sorted_arr = quick_sort(arr)
print("Sorted array:", sorted_arr)

**时间复杂度:**

快速排序的平均时间复杂度为 O(n log n),但最坏情况下(即列表已经有序)其时间复杂度为 O(n^2)。

在本文中,我们讨论了四种常见的排序算法及其时间复杂度。我们还提供了一些示例代码,以帮助理解这些算法。

其他信息

其他资源

Top