leetcode-快速排序C++自写

快速排序

#include <stdio.h>
int a[101], n;//定义全局变量,这两个变量需要在子函数中使用
void quicksort(int left, int right) {
    int i, j, t, temp;
    if (left > right)
        return;
    temp = a[left]; //temp中存的就是基准数
    i = left;
    j = right;
    while (i != j) 
    { //顺序很重要,要先从右边开始找
        while (a[j] >= temp && i < j)//找到右边比基准数小的
        {
            j--;
        }

        while (a[i] <= temp && i < j)//找到左边比基准数大的  
        {
            i++;
        }
        if (i < j)//交换两个数在数组中的位置
        {
            t = a[i];
            a[i] = a[j];
            a[j] = t;
        }
    }
    //最终将基准数归位
    //基准数变成相遇时的数
    a[left] = a[i]; //i ==j  左右指针相遇了,因此要将当前的数和基准数进行交换
    //中间数变成基准数
    a[i] = temp;
    quicksort(left, i - 1);//继续处理左边的,这里是一个递归的过程
    quicksort(i + 1, right);//继续处理右边的 ,这里是一个递归的过程
}
int main() {
    int i;
    //读入数据
    scanf("%d", &n);
    for (i = 1; i <= n; i++)
        scanf("%d", &a[i]);
    quicksort(1, n); //快速排序调用
    //输出排序后的结果
    for (i = 1; i < n; i++)
        printf("%d ", a[i]);
    printf("%d\n", a[n]);
    return 0;
}

 

posted @ 2021-09-26 16:40  A-inspire  Views(83)  Comments(0Edit  收藏  举报