int main()
{
int i,j
int a[12]
for(i=1i<=10++i)
scanf("%d",&a[i])
for(i=1i<10++i)
for(j=ij<=10++j)
if(a[i]<a[j])
{
int t=a[i]
a[i]=a[j]
a[j]=t
}
//前十个数的排序
for(i=1i<=10++i)
printf("%d ",a[i])
printf("\n")
printf("Input a new number: ")
scanf("%d",&a[11])
for(i=10i>0--i)
if(a[i+1]>a[i])
{
int t=a[i]
a[i]=a[i+1]
a[i+1]=t
}
elsebreak
//11个数的排序
for(i=1i<=11++i)
printf("%d ",a[i])
printf("\n")
return 0
}
include<stdio.h>#include<stdlib.h>
main()
{
int a[10],i,j,t
for(i=0i<10i++)
scanf("%d",&a[10])
for(i=0i<9i++)
{for(j=0j<9-ij++)
{
if(a[j]<a[j+1])
{t=a[j]a[j]=a[j+1]a[j+1]=t}
}
}
for(i=0i<10i++)
printf("%d ",a[i])
getch()
}
10个数
在C语言中,二维数组按行存储,对每一行排序很方便,可以把每一行当成一个一维数组,使用排序函数直接进行排序。
然而对每一列进行排序,就不能直接当成一维数组进行排序。但是仍然可以把第j列a[0...M-1][j]在逻辑上当成一维数组进行排序,下面以使用冒泡排序为例对其排序。
对二维数组按列排序后,进一步展示了如何调用快速排序函数按行进行排序。
程序源码:
#include <stdio.h>#include <stdlib.h> #define M 3#define N 3 //输出二维数组的函数void print(int a[][N]){ int i,j for(i=0i<Mi++) { for(j=0j<Nj++) { printf("%d ",a[i][j]) } printf("\n") } } //qsort的cmp函数int cmp(const void*a, const void *b){ return *(int*)a-*(int*)b} int main(int argc, char* argv){ int a[M][N]={3,2,1,9,8,7,6,5,4} printf("按列排序前的二维数组是:\n") print(a) printf("\n") int j for(j=0j<Nj++)//对每一列进行升序排序 { //对第j列进行排序 int m,n int t for(m=M-1m>0m--) { for(n=0n<mn++) { if(a[n][j]>a[n+1][j]) { t=a[n][j] a[n][j]=a[n+1][j] a[n+1][j]=t } } } } printf("按列排序后二维数组变为:\n") print(a) printf("\n") //对按列排序后的二维数组按行升序排序 (调用快速排序函数) int i for(i=0i<Mi++) { qsort(a[i],N,sizeof(a[i][0]),cmp) } printf("按列排序后再按行排序后二维数组变为:\n") print(a) printf("\n") system("pause") return 0}
编译运行后的结果如下: