內部排序算法之簡單插入排序

先貼一段簡單插入排序的代碼:

void insertion_sort(int* p, int n)
{
        int i, k, j;
        for(i=1; i<n; ++i)
        {
                k = p[i];

                j = i-1;
                while(j>=0 && p[j] > p[i])
                {
                        p[j+1] = p[j];
                        --j;
                }
                p[j+1] = k;
        }
}

編譯運行一看,錯了, 結果不對啊。 可是仔細分析, 好像也沒有錯啊。 奇怪了。

再貼一段代碼:

void insertion_sort(int* p, int n)
{
        int i, k, j;
        for(i=1; i<n; ++i)
        {
                k = p[i];

                j = i-1;
                while(j>=0 && p[j] > k)  // 注意這裏的區別
                {
                        p[j+1] = p[j];
                        --j;
                }
                p[j+1] = k;
        }
}

編譯運行一看, 這次排序結果是對的。兩個代碼片段唯一不同的地方在while語句裏面, 一個是p[j > p[i], 一個是p[j] > k, 但是 k = p[i],粗略一看, 邏輯一樣啊,爲什麼上面運行不對, 下面代碼運行正確, 這不科學啊。

思索N久, 沒有結果。先記錄下來,過兩天再仔細考慮, 或者彙編看看。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章