基础练习 数列排序
时间限制: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;
}