【问题标题】:Is this a selection Sort or Insertion sort? Please give me right direction [closed]这是选择排序还是插入排序?请给我正确的方向[关闭]
【发布时间】:2013-04-02 02:51:00
【问题描述】:
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();
}

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

【问题讨论】:

  • 请注意 - 我想交换操作由 3 个 strcpy 组成(如上)会导致排序相当慢(并不是说这种排序足够快以至于它在实践中使用首先,但这是题外话)。通常的想法只是交换指针(除非您正在处理原语)。
  • @Armin:这不是冒泡排序。请注意,他比较/交换了不连续的元素。
  • @comocomocomocomo 这是一个可怕的突变。
  • @Armin “这是一个可怕的突变”。是的,但如果我们不考虑不必要的交换,它的行为类似于选择排序。此外,我见过更糟糕的事情(两个循环都遍历整个数组......)

标签: c sorting insertion-sort selection-sort


【解决方案1】:

这是一种特别慢的选择排序。

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-06-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-17
    • 2021-12-25
    • 2020-03-02
    • 1970-01-01
    相关资源
    最近更新 更多