求大神帮忙,有关选择排序的问题,为什么要定义一个变量int key=array[low];还要这样使用if(array[j]

qq_33837011 2017-07-28 08:59:05
int minkey(int *array, int low,int high)//选择排序
{
int min=low;
int j;
int key=array[low];
for(j=low+1;j<high;j++)
{
if(array[j]<key)//为什么不能使用array[low]
{
key=array[j];//这里也一样
min=j;
}
}
return min;
}

void select(int *array,int n)//选择排序
{
int i;
for(i=0;i<n;i++)
{
int j=minkey(array,i,n);
if(i!=j)
{
swap(&array[i],&array[j]);
}
}
}
void swap(int *a,int *b)//数据的顺序交换
{
int temp=*a;
*a=*b;
*b=temp;
}
...全文
139 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq_33837011 2017-07-28
  • 打赏
  • 举报
回复
引用 3 楼 cfjtaishan 的回复:
这是因为通过遍历数组找到最小值,low代表的最小值,是我们假想的或者假定的最小值,通过遍历找到比假定的最小值之后就要将最小值赋值key,但是如果第一次找到的最小值还不是最小值,那么将继续替换key和下标,知道将数组元素遍历完。然后继续找次最小值,一次类推。
我明白了,key就相当于一个游标,去找出最小值,不能把每次找到的最小值赋值给数组本身的元素,如果最小值不是首位的话,那循环j次就前面的元素全部都成了最小值了
自信男孩 2017-07-28
  • 打赏
  • 举报
回复
这是因为通过遍历数组找到最小值,low代表的最小值,是我们假想的或者假定的最小值,通过遍历找到比假定的最小值之后就要将最小值赋值key,但是如果第一次找到的最小值还不是最小值,那么将继续替换key和下标,知道将数组元素遍历完。然后继续找次最小值,一次类推。
jena_wy 2017-07-28
  • 打赏
  • 举报
回复
因为你用key和array[]里面的所有值去比较,当然要先给key赋一个初始值
真相重于对错 2017-07-28
  • 打赏
  • 举报
回复
因为array[low]是不变的,而key是变化的

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧