0
点赞
收藏
分享

微信扫一扫

A - 数据结构实验之排序一:一趟快排

成义随笔 2022-04-27 阅读 45

Description

给定N个长整型范围内的整数,要求输出以给定数据中第一个数为枢轴进行一趟快速排序之后的结果。

 

Input

连续输入多组数据,每组输入数据第一行给出正整数N(N < = 10^5),随后给出N个长整型范围内的整数,数字间以空格分隔。

Output

输出一趟快速排序后的结果,数字间以一个空格间隔,行末不得有多余空格。

Sample

Input 

8
49 38 65 97 76 13 27 49

Output 

27 38 13 49 76 97 65 49

Hint

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
void quicksort(int l, int r, long int nums[]){
    int i = l;
    int j = r;
    long int key = nums[l];
    if(l >= r){
        return;
    }
    else{
        while(i < j){
            while(i < j && nums[j] >= key){
                j--;
            }
            nums[i] = nums[j];
            while(i < j && nums[i] <= key){
                i++;
            }
            nums[j] = nums[i];
        }
        nums[i] = key;
        //quicksort(l, i - 1, nums);
        //quicksort(i + 1, r, nums);
    }
}
int main(){
    int n;
    int i;
    long int nums[100000];
    while(~scanf("%d", &n)){
        for(i = 0; i < n; i++){
            scanf("%ld", &nums[i]);
        }
        quicksort(0, n - 1, nums);
        for(i = 0; i < n; i++){
            if(i == n - 1){
                printf("%ld\n", nums[i]);
            }
            else{
                printf("%ld ", nums[i]);
            }
        }
    }
    return 0;
}

快排的实现逻辑:
①先从数列中取出一个数作为基准数(通常取第一个数)。
②分区过程,将比这个数大的数全放到它的右边,小于或等于它的数全放到它的左边。
③再对左右区间重复第二步,直到各区间只有一个数。

八分半时间带你了解快速排序(思路讲解加代码展示)_哔哩哔哩_bilibili

举报

相关推荐

0 条评论