c语言中的数组排序

来源:百度知道 编辑:UC知道 时间:2024/06/19 02:59:30
设数组每个元素只存储0至9的数,把该数组的前n个整数的排列看做是一个n位的整数。请高手们编写一个程序,对数组中的元素作调整,产生一个新的排列,使新排列表示的长整数比调整前的整数大(如果可能的话),但又是所有更大的表示中最小的。例如a[]={3,2,6,5,4,1},则运行程序后结果为{3,4,1,2,5,6}.

#include<stdio.h>
#include<windows.h>
int numSort(int *a,int count_num)
{ int i,j,min=-1,temp;
for(j=count_num-1;j>0;j--)
for(i=j-1;i>=0;i--)
if(a[j] > a[i])
{ temp=a[i]; a[i]=a[j]; a[j]=temp;
min=i;
j=0;
break;
}
if(min==-1) return 0;
for(i=min+1;i<count_num-1;i++)
for(j=i+1;j<count_num;j++)
if(a[j] < a[i])
{ temp=a[i];
a[i]=a[j];
a[j]=temp;
}
return 1;
}

void main()
{ int *a;
int i,j,count_num;
printf("个数:");
scanf("%d",&count_num);
a=(int *)malloc(sizeof(int)*count_num);

for(j=0;j<count_num;j++)
{ printf("输入第%d个数:",j+1);
scanf("%d",a+j);
}
if(numSort(a,count_num))
{ printf("\n排列后:");
for(i=0;i<count_num;i++)
printf("%d ",a[i]);