蓝桥杯 BASIC-13 基础练习 数列排序

基础练习 数列排序  

时间限制:1.0s   内存限制:512.0MB

问题描述

  给定一个长度为n的数列,将这个数列按从小到大的顺序排列。1<=n<=200

输入格式

  第一行为一个整数n。
  第二行包含n个整数,为待排序的数,每个整数的绝对值小于10000。

输出格式

  输出一行,按从小到大的顺序输出排序后的数列。

样例输入

5
8 3 6 4 9

样例输出

3 4 6 8 9

#include <stdio.h>

int partition(int *arr, int begin, int end)
{
    int mid = (begin + end) / 2;
    arr[0] = arr[mid];
    arr[mid] = arr[begin];

    while (begin < end)
    {
        while (begin < end && arr[end] >= arr[0])
            end--;
        arr[begin] = arr[end];
        while (begin < end && arr[begin] <= arr[0])
            begin++;
        arr[end] = arr[begin];
    }
    arr[begin] = arr[0];

    return begin;
}

void quicksort(int *arr, int begin, int end)
{
    if (begin >= end)
        return;

    int mid = partition(arr, begin, end);
    quicksort(arr, begin, mid-1);
    quicksort(arr, mid+1, end);
}

int main()
{
    int n;
    int arr[205] = { 0 };

    scanf("%d", &n);
    for (int i = 1; i <= n; ++i)
        scanf("%d", &arr[i]);

    quicksort(arr, 1, n);

    for (int i = 1; i <= n; ++i)
        printf("%d ", arr[i]);

    return 0;
}
发布了183 篇原创文章 · 获赞 40 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/liulizhi1996/article/details/103788832