簡體   English   中英

C ++中的雙向選擇排序

[英]Bidirectional selection sort in C++

我正在開發一個程序來對一個小的數組進行排序。 這是一個課堂作業,需要進行選擇排序,但我想比它要求的更進一步。 我之前已經做過選擇排序,我想嘗試實現雙向版本。 它起作用,除了一個問題。 我的第二個結果始終是第二個結果,並且從未排序。 我覺得我想念一些小而愚蠢的東西。

這是我的搜索功能的代碼

void biSelSort(string engine[], double hits[]) {    
    int k = ARRAY_SIZE - 1;
    for (int i = 0; i < k; i++) {
        int min = i;
        int max = i;
        for (int j = i + 1; j <= k; j++) {
            if (hits[j] < hits[min]) {
                min = j;
            }
            if (hits[j] > hits[max]) {
                max = j;
            }
        }
        string tS = engine[min];
        double tD = hits[min];
        engine[min] = engine[i];
        hits[min] = hits[i];
        engine[i] = tS;
        hits[i] = tD;

        if (max == i) {
            tS = engine[min];
            tD = hits[min];
            engine[min] = engine[k];
            hits[min] = hits[k];
            engine[k] = tS;
            hits[k] = tD;
        } else {
            tS = engine[max];
            tD = hits[max];
            engine[max] = engine[k];
            hits[max] = hits[k];
            engine[k] = tS;
            hits[k] = tD;
        }
        i++;
        k--;
    }
}

您是說要增加i兩次,一次是在for語句中,一次是在循環結束時? 如果這樣做,您確實應該修改代碼,以便只在一個地方進行。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM