簡體   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