C语言如何输入十个数,按从大到小顺序排列!优化程序

#include<stdio.h>
void main()
{
int a[10];
int i,j,t;
printf("input 10 numbers:\n");
for(i=0;i<10;i++)
scanf("%d",&a[i]);
printf("\n");
for(j=0;j<9;j++) /*进行9次循环 实现9趟比较*/
for(i=0;i<9-j;i++) /*在每一趟中进行9-j次比较*/
if(a[i]<a[i+1]) /*相邻两个数比较*/
{
t=a[i];
a[i]=a[i+1];
a[i+1]=t;
}
printf("the sorted numbers:\n");
for(i=0;i<10;i++)
printf(" %d",a[i]);
printf("\n");
}

求改程序的优化。。。
如何定义变量,然后输出循环执行的次数。

给你推荐比较常用的优化方法,即设置一个flag,理由是如果之前发生了交换,那么需要重新考察,如果之前没有交换,那么说明已经完成排序,即不需要交换了,相应的函数定义如下(C语言我已经忘了,只好写给你C++的,你自己转成C语言吧):
void bubsort(short arr[], const size_t& ARR_SIZE )
{
bool issort= false;
for(size_t i= 0; i< ARR_SIZE && !issort ; ++i)
{
issort= true;
for(size_t j =0; j<ARR_SIZE-i-1; ++j)
{
if(arr[j]> arr[j+1])
{
std::swap(arr[j], arr[j+1]);
issort = false;
}
}
}
}
调用的时候将数组名和数组大小传入函数,例如 bubsort(arr,arr_size);调用完函数后再输出这个数组就是排序完的了。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-11-30
那你试试C++吧,里面有排序的函数sort,一个库函数就解决问题,不用你这么纠结了,比你的这个程序简单多了,但是就C而言,这个冒泡排序法已经算是相当的优化了
第2个回答  2011-11-30
看一下这个:
#include <stdio.h>
main()
{ int a[11],i,j,k,x;
printf("Input 10 numbers:\n");
for(i=1;i<11;i++) scanf("%d",&a[i]); printf("\n");
for(i=1;i<10;i++)
{ k=i;
for(j=i+1;j<=10;j++)
if(a[j])>a[k]) k=j;
if(i!=k) { x=a[i]; a[i]=a[k]; a[k]=x;}
}
printf("The sorted numbers:\n");
for(i=1;i<11;i++) printf("%d ",a[i]);追问

那你这个程序 如何定义变量 然后输出程序执行循环的次数??

追答

程序前后就是输入输出很好理解,中间就是冒泡排序法。十个数自然要循环九次了,只是这个程序期间的优点就是,当两个数一样大的时候,就不交换位置了。这是上课时老师给我们的方法

本回答被提问者采纳
第3个回答  2011-11-30
冒泡排序法已经不错的啊