Problem Description
给定N个长整型范围内的整数,要求输出以给定数据中第一个数为枢轴进行一趟快速排序之后的结果。
Input
连续输入多组数据,每组输入数据第一行给出正整数N(N < = 10^5),随后给出N个长整型范围内的整数,数字间以空格分隔。
Output
输出一趟快速排序后的结果,数字间以一个空格间隔,行末不得有多余空格。
Sample Input
8
49 38 65 97 76 13 27 49
Sample Output
27 38 13 49 76 97 65 49
Hint
Source
xam
注: 本题只要求输出一趟快排后的结果,所以在快排函数中没必要进行递归
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int a[10005];
void one_qsort(int* a, int left, int right){
if (left < right){
int i = left;
int j = right;
int key = a[left]; // 暂存第一个数,作为关键数
while (i < j){
while (i < j && a[j] >= key){ // 从右边找到比关键数小的,放入左边位置
j--;
}
a[i] = a[j];
while (i < j && a[i] <= key){ // 同理
i++;
}
a[j] = a[i];
}
a[i] = key; // 关键数归位
}
}
int main(){
int n;
while (~scanf("%d", &n)){
for (int i = 0; i < n; i++){
scanf("%d", &a[i]);
}
one_qsort(a, 0, n-1);
for (int i = 0; i < n; i++){
if (i != n-1){
printf("%d ", a[i]);
}
else{
printf("%d\n", a[i]);
}
}
}
return 0;
}