-2

それは挿入ソートアルゴリズムです

最大の no を次のインデックスに転送することは理解していますが、前の位置 (インデックス) が比較されたばかりの小さい数によってどのように取得されるかを理解することはできません。 j+1]=リスト[j]; しかし、1が後方または前のインデックスに移動する方法

 //unsorted array   
int[] list = new int[] { 5, 2, 4, 6, 1 };   

// the key element being sorted   
int key;   
// 
//start looping starting from the second element  
for (int i = 1; i < list.Length; i++)   
{  
    key = list[i];//store the key 
    int j = i - 1;//get the previous index  
    //
    //loop until you meet a smaller number or 0 
    while (j >= 0 && list[j] > key)  
    { 
        //move the greater number forward  
        list[j + 1] = list[j];  
        // Decrementing  
        j--;   
    }  
    //set the key in the proper index  
    list[j + 1] = key; 
}
4

2 に答える 2

1

これは、ループ内の最後の行で行われます。1 つ以上 (またはゼロ) の項目を前方に移動した後、現在の値が正しい位置に配置されます。

たとえば、配列を最後の項目まで並べ替えた場合、次のようになります。

2, 4, 5, 6, 1

値 1 がkey変数にコピーされ、項目が 1 つずつ前方にコピーされます。

2, 4, 5, 6, -   <-  the empty slot here still contains 1, but it's unused
2, 4, 5, -, 6   <-  the empty slot here still contains 6, but it's unused
2, 4, -, 5, 6
2, -, 4, 5, 6
-, 2, 4, 5, 6

変数の値はkey、最後の項目がコピーされた場所に配置されます。

1, 2, 4, 5, 6

挿入ソートの背後にある理論は、1 つの配列から項目を取得し、新しい配列に挿入することです。あなたが使用している実装は単一の配列のみを使用しており、ソートされた部分とソートされていない部分に分かれていると考えることができます。ソートされた部分は、サイズ 0 から始まります。

[][ 5, 2, 4, 6, 1 ]

配列がソートされると、アイテムはソートされていない部分から選択され、ソートされた部分の適切な場所に挿入されます。ソートされていない部分が空になるまで、ソートされた部分が大きくなり、ソートされていない部分が縮小します。

[ 5 ][ 2, 4, 6, 1 ]
[ 2, 5 ][ 4, 6, 1 ]
[ 2, 4, 5 ][ 6, 1 ]
[ 2, 4, 5, 6 ][ 1 ]
[ 1, 2, 4, 5, 6 ][]
于 2013-01-19T01:42:39.123 に答える
0
There are TWO lists/arrays
The declaration at the top...

int[] list = new int[] { 5, 2, 4, 6, 1 };

Says to make a list/array of integer format called X 
X being whatever name you give it...

In this case the lists/arrays are list/array I[] and list/array J[]

So it (most likely) could be READING from one list/array maybe the I[] list/array
and assigning the SORTED values into the other list/array maybe the J[] list/array
于 2013-01-19T01:33:23.753 に答える