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

时间:2017-08-16 10:46:05

标签: 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);
}

3 个答案:

答案 0 :(得分:4)

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

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

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

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

答案 1 :(得分:2)

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

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

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

答案 2 :(得分:0)

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

<强>分析:

你的Algo:

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

Bubble Sort Algo:

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