在编程中,有多种方法可以对数字进行排序。以下是一些常用的排序算法及其实现方法:
冒泡排序 (Bubble Sort) 原理
:通过重复遍历要排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来。遍历数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。
实现 ```python 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] ```选择排序 (Selection Sort)
原理:每次从待排序的数列中选择最小的数,并将其放在已排序序列的末尾。重复这个过程直到所有的数都按照从小到大的顺序排列。
实现 ```python def selection_sort(arr): n = len(arr) for i in range(n): 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] ```插入排序 (Insertion Sort)
原理:将待排序的数列分为已排序和未排序两部分,每次从未排序的数列中选择一个数,插入到已排序的数列中的正确位置。重复这个过程直到所有的数都按照从小到大的顺序排列。
实现 ```python def insertion_sort(arr): n = len(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 ```快速排序 (Quick Sort)
原理:选择一个基准数,将数列分为左右两部分,左边的数都小于基准数,右边的数都大于基准数,然后递归地对左右两部分进行快速排序。
实现 ```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) ```归并排序 (Merge Sort)
原理:将数列分为两部分,分别对这两部分进行归并排序,然后将排序好的两部分合并成一个有序的数列。
实现 ```python def merge_sort(arr): if len(arr) > 1: mid = len(arr) // 2 left_half = arr[:mid] right_half = arr[mid:] merge_sort(left_half) merge_sort(right_half) i = j = k = 0 while i < len(left_half) and j < len(right_half): if left_half[i] < right_half[j]: arr[k] = left_half[i] i += 1 else: arr[k] = right_half[j] j += 1 k += 1 while i < len(left_half): arr[k] = left_half[i] i += 1 k += 1 while j < len(right_half): arr[k] = right_half[j] j += 1 k += 1 ```Fisher-Yates算法 (也称为Knuth洗牌算法)
原理:通过遍历数组,每次将当前位置的元素与它之后的任意一个位置的元素交换,从而实现随机排序。
实现