题目描述:
对输入的n个数进行排序并输出。
输入:
输入的第一行包括一个整数n(1<=n<=100)。
接下来的一行包括n个整数。
输出:
可能有多组测试数据,对于每组数据,将排序后的n个整数输出,每个数后面都有一个空格。
每组测试数据的结果占一行。
样例输入:
4
1 4 3 2
样例输出:
1 2 3 4
实现一:冒泡排序
/* 冒泡排序 */
#include <stdio.h>
int main(){
int n;
int a[100];
int i,j,temp;
while(scanf("%d",&n)!=EOF){ //可能有多组测试数据
for( i=0;i<n;i++){
scanf("%d",&a[i]);
}
for(j=n-1;j>=0;j--){
for(i=0;i<j;i++){
if(a[i]>a[i+1]){
temp=a[i];
a[i]=a[i+1];
a[i+1]=temp;
}
}
}
for(i=0;i<n;i++){
printf("%d ",a[i]);
}
printf("\n");
}
return 0;
}
实现二:快速排序(版本一:严书)
/* quicksort */
//以第一个元素为主元
int quicksort(int a[],int p,int r);
int partition(int a[],int p,int r);
#include<stdio.h>
int main(){
int n;//待排数列总的个数
int a[100];
int i;
while(scanf("%d",&n)!=EOF){
for( i=0;i<n;i++){
scanf("%d",&a[i]);
}
quicksort(a,0,n-1);
for (i=0;i<n;i++){
printf("%d ",a[i]);
}
printf("\n");
}
return 0;
}
int partition(int a[],int p,int r){
int i,j,temp;
i=p;
j=r;
temp=a[p];
while(i<j){
while(i<j&&a[j]>temp){
j--;
}
if(i<j){
a[i]=a[j];
i++;
}
while(i<j&&a[i]<temp){
i++;
}
if(i<j){
a[j]=a[i];
j--;
}
a[i]=temp;
}
return i;
}
int quicksort(int a[],int p,int r){
int q;
if(p<r){
q=partition(a,p,r);
quicksort(a,p,q-1);
quicksort(a,q+1,r);
}
return 0;
}
实现三:快速排序(版本二:算法导论版本)
/* quickqort */
//算法导论上的单向扫描版本
//以最后一个元素为主元
int quicksort(int a[],int p,int r);
int partition(int a[],int p,int r);
#include<stdio.h>
int main(){
int n;//待排数列总的个数
int a[100];
int i;
while(scanf("%d",&n)!=EOF){
for( i=0;i<n;i++){
scanf("%d",&a[i]);
}
quicksort(a,0,n-1);
for (i=0;i<n;i++){
printf("%d ",a[i]);
}
printf("\n");
}
return 0;
}
int partition(int a[],int p,int r){
int i,j,temp;
i=p-1;
j=p;
for(;j<r;j++){
if(a[j]<a[r]){
i++;
temp=a[i];
a[i]=a[j];
a[j]=temp;
}
}
temp=a[i+1];
a[i+1]=a[r];
a[r]=temp;
return i+1;
}
int quicksort(int a[],int p,int r){
int q;
if(p<r){
q=partition(a,p,r);
quicksort(a,p,q-1);
quicksort(a,q+1,r);
}
return 0;
}