数据结构实验之排序一:一趟快排
Time Limit: 1000MS Memory Limit: 65536KB
Problem Description
给定N个长整型范围内的整数,要求输出以给定数据中第一个数为枢轴进行一趟快速排序之后的结果。
Input
连续输入多组数据,每组输入数据第一行给出正整数N(N < = 10^5),随后给出N个长整型范围内的整数,数字间以空格分隔。
Output
输出一趟快速排序后的结果,数字间以一个空格间隔,行末不得有多余空格。
Example Input
8
49 38 65 97 76 13 27 49
Example Output
27 38 13 49 76 97 65 49
Hint
思路:选择第一个数作为中枢轴temp,left和right作为下标分别从数组的左端和右端与temp进行比较;
直到下标right的数小于temp,num[left]和num[right]交换,right的值记录右端区间边界;
左边同理,当下标left的数大于temp时,交换,left值记录左端区间。
#include<cstdio>
using namespace std;
int num[100005];
void qsort(int *num,int left,int right)
{
if(left>=right)
return;
int temp=num[left];
int first=left;
int last=right;
int flag;
while(left<right)
{
while(left<right&&num[right]>=temp)
right--;
num[left]=num[right];
while(left<right&&num[left]<=temp)
left++;
num[right]=num[left];
}
num[left]=temp;
flag=left;
//qsort(num,first,flag-1);
//qsort(num,flag+1,last);
}
int main()
{
int n;
while(scanf("%d",&n)!=EOF)
{
for(int i=0;i<n;i++)
scanf("%d",&num[i]);
qsort(num,0,n-1);
for(int i=0;i<n;i++)
{
if(i==n-1)
printf("%d\n",num[i]);
else
printf("%d ",num[i]);
}
}
return 0;
}