在c语言中选择排序法
发布网友
发布时间:2022-04-22 05:04
我来回答
共4个回答
热心网友
时间:2023-10-05 05:05
不加也没关系,不加的话就多一个a[i]跟a[i]互换
不过好像if(k != i)这个判断应该是要放到第二个循环外面才是选择排序。
#include <stdio.h>
#define N 6
int main()
{
int i,j,k,t,a[N];
puts("Input N Number:");
for(i = 0;i < N;i ++)
scanf("%d",&a[i]);
putchar(10);
for(i = 0;i < N-1;i ++)
{
k = i;
for(j = i+1;j < N;j ++)
{
if(a[k] < a[j])
k = j;
}
if(k != i)
{
t = a[i];
a[i] = a[k];
a[k] = t;
}
}
for(i = 0;i < N;i ++)
printf("%3d",a[i]);
putchar(10);
return 0;
}
热心网友
时间:2023-10-05 05:06
k!=i,,,,完全可以省略,j的取值是i+1,既然有k=j,那么k的活动范围就不能为i,除非程序编译出错,未赋值成功。
此选择排序算法,无错。但是可以改进下,先求出后面n-1个的最大值,然后和第一个比较。这样k!=i语句可以放到第二个循环外面。
热心网友
时间:2023-10-05 05:06
这个是个算法效率问题,假如k==i了,没有上面那句话,那么a[i]和a[k]是同一个数,就没有必要再进行一次交换,这样缩短了运算时间,提高了运算效率。
热心网友
时间:2023-10-05 05:07
如果最小数的下标有更改,将最小数a[j]与a[i]交换