繁体   English   中英

这是冒泡排序或插入排序在C?

[英]Is this Bubble sort or insertion sort in C?

我通过理解插入排序算法编写了这段代码。 我的老师说它的泡泡排序,但我的朋友说它是插入。 请有人请检查并向我介绍这一点。

#include <stdio.h>
void sort(int n) {
  int i, j;
  float arr[n], k;
  for (i = 0; i <= n - 1; i++) {
    printf("Enter the number");
    scanf("%f", &arr[i]);
  }

  for (i = 1; i <= n - 1; i++) {
    j=i
    while (arr[j] < arr[j - 1] && j > 0) {
      k = arr[j - 1];
      arr[j - 1] = arr[j];
      arr[j] = k;
      /*printf("\n\t%f",arr[j]);*/
      j--;
      /*printf("\n%d",j);*/
    }
    /*printf("\n%d",x[i]);*/
  }
  for (i = 0; i < n; i++) {
    printf("\n%f", arr[i]);
  }
}

int main() {
  int t;
  printf("Enter the number of values to be sorted");
  scanf("%d", &t);
  sort(t);
}

看起来两者兼而有之。 它可能是插入排序,因为你总是在数组的未排序部分中取第一个元素并将其放入数组的排序部分中的正确位置。 但是,插入不是通过向右移动所有必需元素1元素然后将所选元素插入到正确的位置(我会说,标准插入排序),而是将所选元素与1个元素交换到左边,直到选中元素是在正确的地方。

由于数组的“已排序”和“未排序”部分,我会说插入排序。

由于交换邻居元素,我会说冒泡排序。

但是,它似乎更像是插入排序给我。 如果不是(低效)交换,你只需要将左边元素移动到右边,最后只将所选元素写入左边(所选元素的最终,正确位置),这将是一个很好的插入排序

我会说接近插入排序,因为你通过找到第一个错配来创建排序的块。 而不是迭代整个数组并将最大元素推送到最后(如在冒泡排序中)

它更接近插入排序的标准版本,您可以在其中交换元素,直到在排序的块中找到正确的位置。 但是,插入元素后,从错误的索引开始索引,因为它创建了一个已排序的子数组。

这有助于可视化两种排序算法: https//visualgo.net/bn/sorting

这是一个Bubble Sort算法。 Bubble Sort算法与您的算法之间的唯一区别是Bubble Sort算法首先对最右边的元素进行Bubble Sort ,然后依次对您的算法进行排序。

分析:

你的Algo:

<---------
 <--------
  <-------
   <------
    <-----
     <----
      <---
       <--
        <-
         <

冒泡排序算法:

------>
----->
---->
--->
-->
->
>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM