当前位置:实例文章 » 其他实例» [文章]408复试day2(7大排序算法)

408复试day2(7大排序算法)

发布人:shili8 发布时间:2025-03-07 00:22 阅读次数:0

**第2 天复习日志**

今天是我们进入复试的第二天,我们需要在短时间内完成7 大排序算法的学习和实践。下面是我对这7 个算法的总结和代码示例。

###1. 冒泡排序冒泡排序是一种简单的排序算法,通过反复比较相邻元素,并进行交换,使得较大的元素向上"冒"到最高位置。

**时间复杂度:** O(n^2)
**空间复杂度:** O(1)

def bubble_sort(arr):
 n = len(arr)
 for i in range(n-1):
 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# 测试arr = [64,34,25,12,22,11,90]
print(bubble_sort(arr)) # 输出: [11,12,22,25,34,64,90]


###2.选择排序选择排序是一种简单的排序算法,通过首先找到最小元素,然后将其与第一个元素交换,接着再次从剩余未排序元素中找到最小元素,并将其与第二个元素交换,以此类推。

**时间复杂度:** O(n^2)
**空间复杂度:** O(1)

def selection_sort(arr):
 n = len(arr)
 for i in range(n-1):
 min_idx = i for j in range(i+1, n):
 if arr[j] < arr[min_idx]:
 min_idx = j arr[i], arr[min_idx] = arr[min_idx], arr[i]
 return arr# 测试arr = [64,34,25,12,22,11,90]
print(selection_sort(arr)) # 输出: [11,12,22,25,34,64,90]


###3. 插入排序插入排序是一种简单的排序算法,通过将每个元素插入到已经排好序的前面部分中。

**时间复杂度:** O(n^2)
**空间复杂度:** O(1)

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# 测试arr = [64,34,25,12,22,11,90]
print(insertion_sort(arr)) # 输出: [11,12,22,25,34,64,90]


###4. 归并排序归并排序是一种分治法的排序算法,通过将数组分成两个子数组,然后分别对每个子数组进行排序,并将它们合并起来。

**时间复杂度:** O(n log n)
**空间复杂度:** O(n)

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 = []
 while left and right:
 if left[0] < right[0]:
 result.append(left.pop(0))
 else:
 result.append(right.pop(0))
 result.extend(left)
 result.extend(right)
 return result# 测试arr = [64,34,25,12,22,11,90]
print(merge_sort(arr)) # 输出: [11,12,22,25,34,64,90]


###5. 快速排序快速排序是一种分治法的排序算法,通过选择一个元素作为基准点,然后将数组分成两个子数组,并分别对每个子数组进行排序。

**时间复杂度:** O(n log n)
**空间复杂度:** O(log 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)

# 测试arr = [64,34,25,12,22,11,90]
print(quick_sort(arr)) # 输出: [11,12,22,25,34,64,90]


###6. 堆排序堆排序是一种分治法的排序算法,通过将数组建成一个最大堆,然后逐步地将最大元素交换到最后面。

**时间复杂度:** O(n log n)
**空间复杂度:** O(1)

def heapify(arr, n, i):
 largest = i left =2 * i +1 right =2 * i +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)

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 = [64,34,25,12,22,11,90]
print(heap_sort(arr)) # 输出: [11,12,22,25,34,64,90]


###7. 桶排序桶排序是一种分治法的排序算法,通过将数组分成多个桶,然后对每个桶进行排序。

**时间复杂度:** O(n + k)
**空间复杂度:** O(n + k)

def bucket_sort(arr):
 min_val = min(arr)
 max_val = max(arr)
 bucket_count = (max_val - min_val) // len(arr) +1 buckets = [[] for _ in range(bucket_count)]
 for num in arr:
 index = (num - min_val) // (bucket_count -1)
 buckets[index].append(num)
 sorted_arr = []
 for bucket in buckets:
 sorted_arr.extend(sorted(bucket))
 return sorted_arr# 测试arr = [64,34,25,12,22,11,90]
print(bucket_sort(arr)) # 输出: [11,12,22,25,34,64,90]


以上就是这7 个排序算法的总结和代码示例。每个算法都有其特点和应用场景,选择合适的算法可以提高程序的效率和准确性。

相关标签:算法排序算法
其他信息

其他资源

Top