c - 这是选择排序还是插入排序?请给我正确的方向

标签 c sorting insertion-sort selection-sort

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();
}

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

最佳答案

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

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

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

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

关于c - 这是选择排序还是插入排序?请给我正确的方向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15922873/

相关文章:

c - C中的字符串初始化

c++ - 识别/生成波形?

Java集合排序

c - 有没有更好的插入排序方法?

c - 插入排序算法

javascript - 检查 JS 中的数组 - 列表是否已排序?

c - 按内存大小缩放 bmp 文件

java - 在java中通过套接字发送大数据

c - 使用初始数据读取串口会导致很多零

python - 将列表中的元素分类为特定长度的列表列表