0
void main()
{
  char name[5][10],temp[10];
  int i,j;
  for(i=0;i<5;i++)
{
 printf("\nEnter the name of student:");
 scanf("%s",name[i]);
}
for(i=0;i<(5-1);i++)
{
  for(j=i+1;j<5;j++)
  {
    if(strcmp(name[i],name[j])>0)
  {
    strcpy(temp,name[i]);
    strcpy(name[i],name[j]);
    strcpy(name[j],temp);
   }
  }
}
printf("\n the name of student is:");
for(i=0;i<5;i++)
{
 printf("\n%s",name[i]);
}
 getch();
}

我无法弄清楚插入排序和选择排序之间的区别..这段代码是遵循选择算法还是插入?

4

1 回答 1

2

它是选择排序的一个特别慢的版本。

它看起来像冒泡排序,但冒泡排序会比较/交换位置j-1和的元素j,它们是连续的。您比较/交换位置i和的元素j

在外循环的每次迭代期间,从前进到结束i时保持不变。因此,您最终会在 position 处获得具有最小值的元素。ji+1i

你可能做了很多不必要的动作。适当的选择排序将搜索最小值而不移动任何内容。然后它将该最小值与 position 处的值交换i。因此,它只会对数组中的每个元素执行一次交换。

于 2013-04-10T10:49:27.393 回答