防止面试过程中不能直接用sort()或者stable_sort(),下面给出两种简单实现且高效的排序算法的手动实现,直接背下来就完事了!!
不稳定:(快速排序)
#include <iostream>
#include <vector>
using namespace std;
// 快速排序函数
void quickSort(vector<int>& nums, int left, int right) {
if (left >= right) return; // 递归终止条件
int pivot = nums[left]; // 选择基准值
int i = left, j = right;
while (i < j) {
// 从右往左找比 pivot 小的数
while (i < j && nums[j] >= pivot) j--;
// 从左往右找比 pivot 大的数
while (i < j && nums[i] <= pivot) i++;
if (i < j) swap(nums[i], nums[j]); // 交换不符合顺序的数
}
swap(nums[left], nums[i]); // 基准值归位
// 递归处理左右子区间
quickSort(nums, left, i - 1);
quickSort(nums, i + 1, right);
}
// 主函数测试
int main() {
vector<int> nums = {5, 2, 9, 1, 6, 3};
quickSort(nums, 0, nums.size() - 1);
for (int num : nums) {
cout << num << " ";
}
cout << endl;
return 0;
}
稳定排序:(插入排序)
void insertionSort(vector<int>& arr) {
int n = arr.size();
for (int i = 1; i < n; ++i) {
int key = arr[i];
int j = i - 1;
// 将大于 key 的元素右移
while (j >= 0 && arr[j] > key) {
arr[j + 1] = arr[j];
--j;
}
// 插入 key 到正确位置
arr[j + 1] = key;
}
}