#include <stdio.h>
#define N 16
typedef struct
{ char num[10];
int s;
} STREC;
void fun( STREC a[] )
{STREC k;int j,i;
for(i=0;i<N;i++)
for(j=1;j<N;j++)
if(a[j].s>a[i].s)
{k=a[j];a[j]=a[i];a[i]=k;}
}
main()
{ STREC s[N]={{"GA005",85},{"GA003",76},{"GA002",69},{"GA004",85},
{"GA001",91},{"GA007",72},{"GA008",64},{"GA006",87},
{"GA015",85},{"GA013",91},{"GA012",64},{"GA014",91},
{"GA011",66},{"GA017",64},{"GA018",64},{"GA016",72}};
int i;FILE *out ;
fun( s );
printf("The data after sorted :\n");
for(i=0;i<N; i++)
{ if( (i)%4==0 )printf("\n");
printf("%s %4d ",s[i].num,s[i].s);
}
我这里不换成I+1的话,第二轮循环第一次是A[1]和A[1]的比较这个没问题呀。第三轮第一次的时候是A[2]和A[1]。这不会导致错误吧?
追答冒泡排序的顺序是 这样的:比如
有10个数序号为 :
12345678910;
我们从1开始比较,1和2 比,然后找出大的或者更小的和3比,一次类推。
当1比较完之后2开始比,这个时候的2,是不需要和他前面的那位数比较的,因为他前面的数肯定已经比过了,直接和3比较就对了,冒泡法的最终比较次数是55次,不是100次
我的这个算法是重复了,但没有错对吧?但是为什么系统没有办法完成比较?
追答有问题。冒泡法实际不只是比较,他还要赋值,会把小的和大的顺序对调,你的j没有规律,会导致重复对调。