选择排序的问题
#include"stdio.h"#include"string.h"
typedef struct
{ int vec[4];
int len;
}node;
void PaiXu_XuanZe(node *r1)
{ int i,j,k,t;
for(i=0;i<r1->len;i++) //做n-1趟选择排序
{ k=i; //k保存当前得到的最小关键字记录的下标,初值为i
for(j=i+1;j<=r1->len;j++) //在当前无序区中选关键字最小的记录
if(r1->vec[j]<r1->vec[k])
k=j; //记下最小关键字的位置
if(j!=k)
{ t=r1->vec[i];
r1->vec[i]=r1->vec[k];
r1->vec[k]=t;
}
}
}
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_XuanZe(r1);
printf("\n");
for(i=0;i<4;i++)
printf("%d",r1->vec[i]);
}
搜索更多相关的解决方案:
选择
----------------解决方案--------------------------------------------------------
#include"stdio.h" #include"string.h" typedef struct { int vec[4]; int len; }node; void PaiXu_XuanZe(node *r1) { int i,j,k,t; for(i=0;i<=r1->len-2;i++) /*做n-1趟选择排序,从0到len-2才是n-1趟,否则就是n趟了*/ { k=i; for(j=i+1;j<=r1->len-1;j++) /*j作为数组元素的下标,最大值只能是r1->len-1*/ if(r1->vec[j]<r1->vec[k]) k=j; if(j!=k) { t=r1->vec[i]; r1->vec[i]=r1->vec[k]; r1->vec[k]=t; } } } 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_XuanZe(r1); printf("\n"); for(i=0;i<4;i++) printf("%d\t",r1->vec[i]); } OK了!
----------------解决方案--------------------------------------------------------
谢谢赐教
----------------解决方案--------------------------------------------------------