这个c程序怎么错了?

来源:百度知道 编辑:UC知道 时间:2024/09/24 14:18:22
在文件IN.DAT中有200个正整数,且每个数均在1000至9999之间。函数readDat()的功能是读取这200个数存放到数组aa中。请编制函数jsSort(),该函数的功能是:要求按每个数的后3位的大小进行降序排列,将排序后的前10个数存入数组bb中,如果出现后3位相等的数,则对这些数按原始4位数据进行升序排列。最后调用函数writeDat()把结果bb输出到文件OUT.DAT中。

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int aa[200], bb[10] ;
void readDat();
void writeDat();
void jsSort()
{int i,j,hou3[200],t;
for(i=0;i<200;i++)
{ hou3[i]=aa[i]%1000;}

for(i=0;i<199;i++)
for(j=0;j<199-i;j++)
{
if(hou3[j]<hou3[j+1])
{t=aa[j];
aa[j]=aa[j+1];
aa[j+1]=t;}
else
if(hou3[j]==hou3[j+1])
if(aa[j]>aa[j+1])
{t=aa[j];
aa[j]=aa[j+1];
aa[j+1]=t;}

}

for(i=0;i<10;i++)
bb[i]=aa[i];

}
void main()
{
readDat() ;
jsSort() ;
writeDat() ;
}
void readDat()
{
FILE *in ;
in

你好,你这个程序我找了半天错误,后来才恍然大悟。。
你在排序的时候,是用的hor3数组比较,但是你交换的时候交换的是aa数组的元素,而hou3数组中的元素并没有交换,可是你每次都是用hou3比较的啊~~,而人家标准答案就没有你这个问题了,比较和交换用的是同一个数组。
至于怎么改,我想你肯定知道了。

if(hou3[j]<hou3[j+1])
{t=aa[j];
aa[j]=aa[j+1];
aa[j+1]=t;}
不仅要交换aa中的元素,还要交换hou3中的元素。

就错在这里
for(i=0;i<199;i++)
for(j=0;j<199-i;j++)

起泡法就是要按这个次序比较:
for(i=0;i<199;i++)
for(j=i+1;j<200;j++)