2017-08-16 5 views
3

私は挿入の並べ替えを理解することによってこのコードを書いています。私の先生は、バブルの種類を言うが、私の友人はそれが挿入だと言っている。誰かがこれをチェックして私にブリーフィングしてもらえますか?このバブルソートまたは挿入ソートは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

は、これは挿入/バブルソートの最悪のバージョンです。 – haccks

答えて

4

私のために両方の/両方のように見えます。配列のソートされていない部分の最初の要素を常に取り、それを配列のソートされた部分の正しい場所に配置するため、ソートの並べ替えが可能です。しかし、挿入は、必要な要素をすべて1つ右に移動し、選択した要素を正しい場所に挿入することによって行われませんが、選択された要素は、選択された要素まで1要素左にスワップされます正しい場所にあります。

配列の「ソート済み」と「ソートされていない」部分のために、私はソートの並べ替えを言うでしょう。

隣接要素を交換するため、私はバブルソートと言います。

しかし、それは私にインサートの並べ替えのように思えます。 (非効率的な)スワッピングの代わりに、左の要素を右に移動し、最後に選択した要素を最後に書き込むだけです(選択した要素の最終的な正しい位置)。

+1

私はあなたに同意します。このコンセプトは間違いなく「挿入の並べ替え」ですが、避けられない非効率性を交換しています。さらに、 'i'は' while'と 'for'の間で共有され、それはさらに非効率的になります。 –

0

Bubble Sortアルゴリズム。 Bubble Sortアルゴリズムとアルゴリズムの違いは、Bubble Sortアルゴリズムが最も右の要素を最初にソートし、次にアルゴリズムが最も左の要素を最初にソートすることです。

分析:

あなたのアルゴ:

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

バブルソートアルゴ:

------> 
-----> 
----> 
---> 
--> 
-> 
> 
+0

私はそれが左から右への違いだけ右であることに同意しない。バブルソートでは、配列内の最後の要素が外側ループの繰り返しごとに1つの位置に移動します。問題では、最後の要素は、外側ループの最後の反復までまったく動かされません。 –

+0

@これが逆であれば@TomášZahradníčekは正しくあります。最も小さな要素は最初のインデックスにあるはずです。 – Hakes

2

あなたが最初のミスフィットを見つけることによってソートされたチャンクを作成するように私は挿入ソートに近いと言うでしょう。

ソートされたチャンクで正しい場所を見つけるまで、要素を入れ替える挿入ソートの標準バージョンに近いです。ただし、要素を挿入した後は、ソートされたサブ配列が作成されたため、間違ったインデックスからインデックスを開始します。

これは、二つのソートアルゴリズムを可視化することができます: https://visualgo.net/bn/sorting

関連する問題