快速排序 C++

#include<iostream>
#include<cstdio>
using namespace std;

void swap(int &x, int &y) {
    int tmp = x;
    x = y;
    y = tmp;
}

void quickSort(int * & a,int left, int right) {  //数组的引用
    if (left >= right)                           //跳出递归调用
        return;
    int key = a[left];
    int keyPosition = left;                     //记录参数的初始值
    int rightPosition = right;
    int leftPosition = left;

    while (left < right) {

        //右指针左移 当a[右]<key时跳出、
        //记录此时的 right值(和a[left]交换)
        while (left < right && a[right] >= key) { //右指针移动
            right = right - 1;
        }

        //左指针右移 当a[左]>key时跳出
        //记录此时的 left值(和a[right]交换)
        while (left < right && a[left] <= key) {
            left = left + 1;
        }

        
        swap(a[left], a[right]);

        if (left == right) {
            swap(a[keyPosition], a[left]);
        }
        quickSort(a, leftPosition, left - 1);
        quickSort(a, left + 1,  rightPosition);
    }
}
int main() {
    int n;
    //输入的待排序的数字的个数
    cout << "输入数字个数:";
    cin >> n;

    int* arr = (int*)malloc(sizeof(int) * n);
    //输入数字
    cout << "输入待排序的数字:";
    for (int i = 0; i < n; ++i) {
        cin >> arr[i];
    }

    quickSort(arr, 0, n - 1);
    for (int j = 0; j < n; ++j) {
        cout << arr[j] << " ";
    }

    return 0;
}

b63cedf2699b4bc0b259718975f06323.png

3303d2123d12454f8a71f857adda2d9f.png 

71dab0e0d51b4bd8a54f350de1b269af.png 

9d30b787ace84c66a9676f4e3a8a4389.png 

9c2d889a35f04a3e98afb961b096fb0e.png 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值