|
发表于 2004-10-29 00:24:26
|
显示全部楼层
楼上正解
楼主可以跟一下进程看看,你的程序没有错,而且已经排序完成了,但是有一个特殊情况,就是除非最大的数字在最前面,否则你的程序必然打印无变化,因为除非最后一次也变化,否则exchange都会等于0,而最后一次也要交换的情况只出现在最大的数字在最前面的情况下,这个是你的程序的改进,可以让你清楚的看到每一步的变化,你可以试试一些步同的赋值
- #include <stdio.h>
- void pr(int * buf,int length)
- {
- int i;
- for(i=0;i<length;i++)
- {
- printf("%d\t",buf[i]);
- }
- printf("\n");
- }
- int main()
- {
- int buf[]={10,11,7,6,5,9};
- int i,j,length,exchange,temp;
- length=sizeof(buf)/sizeof(int);
- printf("befor:\n");
- for(i=0;i<length;i++)
- printf("%d\t",buf[i]);
- printf("\n");
- for(i=1;i<length;i++)
- {
- for(j=length-1;j>=i;j--)
- {
- exchange=0;
- if(buf[j]<buf[j-1])
- {
- temp=buf[j];
- buf[j]=buf[j-1];
- buf[j-1]=temp;
- exchange=1;
- }
- printf("\nexchange is %d\n",exchange);
- pr(buf,length);
- }
- if(!exchange)
- {
- printf("no change\n");
- return;
- }
- }
- printf("after:\n");
- pr(buf,length);
- }
复制代码 |
|