数据结构实验之排序八:快速排序
Problem Description
给定N(N≤10^5)个整数,要求用快速排序对数据进行升序排列,注意不得使用STL。
Input
连续输入多组数据,每组输入数据第一行给出正整数N(≤10^5),随后给出N个整数,数字间以空格分隔。
Output
输出排序后的结果,数字间以一个空格间隔,行末不得有多余空格。
Sample Input
8
49 38 65 97 76 13 27 49
Sample Output
13 27 38 49 49 65 76 97
#include <stdio.h>
void qsort( int a[], int left, int ringt );
int main()
{
int n;
while ( ~scanf("%d",&n) ) {
int a[n];
for ( int i=0; i<n; i++ ) {
scanf("%d",&a[i]);
}
qsort(a,0,n-1);
printf("%d",a[0]);
for ( int i=1; i<n; i++ ) {
printf(" %d",a[i]);
}
printf("\n");
}
return 0;
}
void qsort( int a[], int left, int right )
{
int key = a[left];
int i = left;
int j = right;
if ( i>=j ) { // 注意:此为递归结束条件
return ; //
} //
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;
qsort(a,left,i-1);
qsort(a,i+1,right);
}
/***************************************************
User name: rj180323石旭
Result: Accepted
Take time: 160ms
Take Memory: 536KB
Submit time: 2018-12-27 20:13:45
****************************************************/
熟练后可使用qsort函数 。如下
#include <stdio.h>
#include <stdlib.h>
int a[1000];
int cmp( const void *a, const void *b );
int main()
{
int i,n;
scanf("%d",&n);
for ( i=0; i<n; i++ ) {
scanf("%d",&a[i]);
}
qsort(a,n,sizeof(a[0]),cmp);
for ( i=0; i<n; i++ ) {
printf("%d ",a[i]);
}
return 0;
}
int cmp( const void *a, const void *b )
{
return ( *(int *)a - *(int *)b );
}