排序算法
1. 冒泡排序(Bubble Sort)
-
基本思想:通过重复遍历数组,比较相邻元素并交换位置,将较大的元素逐渐“冒泡”到数组的末尾。
-
时间复杂度:
-
最好情况:O(n)(数组已经有序)
-
平均和最坏情况:O(n²)
-
-
空间复杂度:O(1)(原地排序)
-
稳定性:稳定
-
代码示例:
void bubbleSort(vector<int>& arr) { int n = arr.size(); for (int i = 0; i < n-1; i++) { bool swapped = false; for (int j = 0; j < n-i-1; j++) { if (arr[j] > arr[j+1]) { swap(arr[j], arr[j+1]); swapped = true; } } if (!swapped) break; // 提前终止优化 } }
2. 选择排序(Selection Sort)
-
基本思想:每次从未排序部分选择最小元素,放到已排序部分的末尾。
-
时间复杂度:O(n²)(所有情况)
-
空间复杂度:O(1)
-
稳定性:不稳定
-
代码示例:
void selectionSort(vector<int>& arr) { int n = arr.size(); for (int i = 0; i < n-1; i++) { int minIdx = i; for (int j = i+1; j < n; j++) { if (arr[j] < arr[minIdx]) minIdx = j; } swap(arr[i], arr[minIdx]); } }
3. 插入排序(Insertion Sort)
-
基本思想:将数组分为已排序和未排序