快速排序

快速排序思想逻辑
  • 在数据集之中,选择一个元素作为”基准”(pivot)
  • 所有小于”基准”的元素,都移到”基准”的左边;所有大于”基准”的元素,都移到”基准”的右边
  • 对”基准”左边和右边的两个子集,不断重复第一步和第二步,直到所有子集只剩下一个元素为止

这里写图片描述


快速排序代码
#include<iostream>
using namespace std;

void Quicksort(int32_t numList[], int32_t left, int32_t right) {
    if (left >= right) {
        return;
    }

    auto leftTmp = left;
    auto rightTmp = right;
    auto tmp = numList[left];
    while (rightTmp > leftTmp) {
        while (rightTmp > leftTmp && numList[rightTmp] > tmp) {
             rightTmp--;
        }

        if (rightTmp > leftTmp) {
            numList[leftTmp] = numList[rightTmp];
            leftTmp++;
        }

        while (rightTmp > leftTmp && numList[leftTmp] < tmp) {
            leftTmp++;
        }

        if (rightTmp > leftTmp) {
            numList[rightTmp] = numList[leftTmp];
            rightTmp--;
        }
    }

    numList[leftTmp] = tmp;
    Quicksort(numList, left, leftTmp - 1);
    Quicksort(numList, rightTmp + 1, right);
}

void main() {
    int32_t numList[] = { 6,1,2,7,9,3,4,5,10,8 };
    int32_t count = sizeof(numList) / sizeof(numList[0]);
    Quicksort(numList, 0, count - 1);
}

返回排序算法分析总结

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值