插入排序问题
#include"stdio.h"#include"string.h"
typedef struct
{ int vec[4];
int len;
}node;
void PaiXu_CharRu(node *r1)
{ int i,j;
for(i=2;i<=r1->len;i++)
{ r1->vec[0]=r1->vec[i];
j=i-1;
while(r1->vec[0]<r1->vec[j])
{ r1->vec[j+1]=r1->vec[j];
j--;
}
r1->vec[j+1]=r1->vec[0];
}
}
main()
{ node *r1;
int x,i;
r1=(node*)malloc(sizeof(node));
for(i=0;i<4;i++)
scanf("%d",&r1->vec[i]);
r1->len=4;
PaiXu_CharRu(r1);
printf("\n");
for(i=0;i<4;i++)
printf("%d",r1->vec[i]);
} // 问题是第1个元素不能排序
----------------解决方案--------------------------------------------------------
#include"stdio.h" #include"string.h" typedef struct { int vec[5]; /*插入排序使用第一个元素作为监视哨,因此,数组大小应该比实际元素个数多一个*/ int len; }node; void PaiXu_CharRu(node *r1) { int i,j; for(i=2;i<=r1->len-1;i++) /*下标最大应该为长度-1*/ { r1->vec[0]=r1->vec[i]; j=i-1; while(r1->vec[0]<r1->vec[j]) { r1->vec[j+1]=r1->vec[j]; j--; } r1->vec[j+1]=r1->vec[0]; } } main() { node *r1; int x,i; r1=(node*)malloc(sizeof(node)); for(i=1;i<=4;i++) /*给数组中的元素赋值(除第一个元素外,应为第一个元素要作临时变量用)*/ scanf("%d",&r1->vec[i]); r1->len=5; PaiXu_CharRu(r1); printf("\n"); for(i=1;i<=4;i++) /*输出的结果中,不应该包括第一个元素(第一个元素是监视哨,相当于一个临时变量),因此,下标从1开始*/ printf("%d\t",r1->vec[i]); } // 问题是第1个元素不能排 现在第一个元素也可以排了!
----------------解决方案--------------------------------------------------------
高手啊, 听了10年的课不如看你回一个贴~
----------------解决方案--------------------------------------------------------