手动实现两种典型简单排序(稳定与不稳定)

防止面试过程中不能直接用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;
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值