1202 排序(冒泡排序,快速排序)

来源:互联网 发布:otdr曲线图制作软件 编辑:程序博客网 时间:2024/05/21 11:33

题目描述:
    对输入的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;}

0 0
原创粉丝点击