#include <stdio.h>
#include <stdlib.h>
int ispaixu(int n,int m);
int main(void)
{
int m,n;
while(scanf("%d %d",&n,&m)!=EOF)
{
ispaixu(n,m);
}
return 0;
}
int ispaixu(int n,int m)
{ int k,i,l,temp,min,weizhi;
int a[100000];
for(i=0;i<n;i++)
{
scanf("%d",&a[i]);
}
for(k=0;k<m-1;k++)
{ min = a[k];
for(i=k+1;i<n;i++)
{
if(a[i]<min)
{
min = a[i];
weizhi = i;
}
}
temp = a[k];
a[k] = min;
a[weizhi] = temp;
}
for(l=0;l<n-1;l++)
{
printf("%d ",a[l]);
}
printf("%d",a[n-1]);
printf("\n");
}
题目是:7-9 m趟选择排序 (10 分)
先在第一行输入整数n和m,再在第二行输入n个整数构成的数列,要求利用选择排序(每趟排序最多交换一次)进行排序,并输出第m趟排序后的数列状况。请把选择排序定义为一个函数。
输入格式:
测试数据有多组,处理到文件尾。对于每组测试,先在第一行输入整数n和m(1<m<n<=40),再在第二行输入n个整数。
输出格式:
对于每组测试,输出m趟选择排序后的结果,每两个数据之间留一个空格。
输入样例:
6 3
3 5 1 2 8 6
4 3
9 8 7 6
输出样例:
1 2 3 5 8 6
6 7 8 9
21行处要加一个weizhi = 0;否则如果第一个数就是最小值,那这个weizhi就没有赋值,是个乱码
for(k=0;k<m-1;k++)
{
min = a[k];
weizhi = k; //这里加上weizhi = k;
for(i=k+1;i<n;i++)
你题目的解答代码如下:
#include <stdio.h>
#include <stdlib.h>
int ispaixu(int n,int m);
int main(void)
{
int m,n;
while(scanf("%d %d",&n,&m)!=EOF)
{
ispaixu(n,m);
}
return 0;
}
int ispaixu(int n,int m)
{ int k,i,l,temp,min,weizhi;
int a[100000];
for(i=0;i<n;i++)
{
scanf("%d",&a[i]);
}
for(k=0;k<m-1;k++)
{
min = a[k];
weizhi = k; //加上weizhi = k;
for(i=k+1;i<n;i++)
{
if(a[i]<min)
{
min = a[i];
weizhi = i;
}
}
temp = a[k];
a[k] = min;
a[weizhi] = temp;
}
for(l=0;l<n-1;l++)
{
printf("%d ",a[l]);
}
printf("%d",a[n-1]);
printf("\n");
}
如有帮助,望采纳!谢谢!
数组变小也不对,也显示段错误