2011-02-11 21 views
1

これはどのソートアルゴリズムですか?私は昨夜この方法を考え、いくつかのコードをすばやく作成し、驚いたことに完璧に働きました。私はソートアルゴリズムに関するWikipediaの記事を見てきましたが、Stack Overflowを検索しましたが、これまたは類似のアルゴリズムを見つけることができませんでした。整数ソートアルゴリズムの識別に役立つ必要があります

これは、アルゴリズムの書かれたプロセスである:

[3, 1, 0, 4] 
^  ^Check outermost items, swap if necessary 
---------------- 
[3, 1, 0, 4] 
^ ^ Check first pair of second farthest apart items, swap if necessary 
[0, 1, 3, 4] 
---------------- 
[0, 1, 3, 4] 
    ^ ^Check second pair of second farthest apart items, swap if necessary 
---------------- 
[0, 1, 3, 4] 
^^  Check first pair of third farthest apart items, swap if necessary 
---------------- 
[0, 1, 3, 4] 
    ^^  Check second pair of third farthest apart items, swap if necessary 
---------------- 
[0, 1, 3, 4] 
    ^^ Check third pair of third farthest apart items, swap if necessary 
---------------- 
[0, 1, 3, 4] 
      Cannot compare closer items (adjacent), done. 

これはJavaScriptでアルゴリズムです:

var unsorted = [4, 9, 10, 2, 9, 4, 0]; 
var sorted = ianSort(unsorted); 

function ianSort(array) { 
    for(var j = array.length; j > 1; j--) { 
     for(var i = 0; i < array.length - j + 1; i++) { 
      if(array[i] > array[i + j - 1]) { 
       var temp = array[i]; 
       array[i] = array[i + j - 1]; 
       array[i + j - 1] = temp; 
      } 
     } 
    } 
    return array; 
} 

(私は私は万一にここIanSort関数を呼び出しました一番最初に考えてみてください^^^

+0

@イアン - これはいつも有効ですか?つまり、正しく動作することを示す正しい証明がありますか?また書いたように、これはO(n^2)の並べ替えなので、残念ながら私はあなたがそれから豊かで有名になるとは思わないと思います。それでもうまくいけば、本当にクールです! :-) – templatetypedef

+0

いいえ、それはO(n^2)ではなく、実際にはかなり効果的です。そして、はい、私は完全に自分のコードをテストしました。 – Ian

+0

それは二次的に見える。演算の数は '1 + 2 + 3 + ... + array.length'で、これは' O(n^2) 'になります。たとえば、百万要素の配列でテストしましたか? – IVlad

答えて

2

あなたが考案したものは、最初は大きなステップサイズで始まり、その後ステップサイズを減衰させるバブルソートの一般化であるcomb sortに関連していると思います。伝統的には、くし型ソートは大きなサイズから開始し、各反復で一定の係数で区間サイズを減衰させることによって機能します。アルゴリズムは基本的に、反復ごとにステップサイズが1ずつ小さくなるように定数を選択することでこれを行います。

+0

秒でビートしてください... – Blastfurnace

+0

もう少し詳細な方法で似たように見せてもらえますか?申し訳ありませんが、私は2つのアルゴリズムを合わせるのに苦労しています。 – Ian

+0

@Ian:これは、シェルソートが挿入ソートの拡張であるのと同じ意味で、バブルソートの拡張です。 – Blastfurnace

0

ように見えます。私はまた、数年前に初めて発見したと思って、クイックソートやその他のソートアルゴリズムをテストするためにいくつかのバリエーションを作った。 my research hereについて読むことができます。

クイックソートに匹敵する高速アルゴリズムです。いくつかの条件でもそれを打ち負かすことさえできます。

関連する問題