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