簡體   English   中英

使用幻燈片而不是交換進行氣泡排序

[英]Bubble Sort Using Slides instead of swaps

目前,我被要求設計四種排序算法(插入,外殼,選擇和冒泡),而我有4種排序算法中的3種運行良好; 唯一無法正常運行的是氣泡排序。 現在,我很清楚正常的冒泡排序是如何使用temp var交換兩個索引的,但是棘手的是,它需要使用數組index [0]作為臨時而不是正常的數組temp(用於交換),並將較低的數組變量向下滑動到列表的開頭,並在傳遞的末尾將最后一個索引分配給temp,這是最大值。

我已經玩了一段時間了,甚至試圖查找參考,但可惜我找不到任何東西。 我希望其他人可以做到這一點,並且可以提供一些有用的提示。 這是最后的手段,因為我一直在用筆和紙修改並遍歷通行證,以嘗試查找致命錯誤。 無論如何,我的代碼如下...

void BubbleSort(int TheArray[], int size)
{
    for (int i = 1; i < size + 1; i++)
    {
        TheArray[0] = TheArray[i];
        for (int j = i + 1; j < size; j++)
        {
            if (TheArray[j] > TheArray[0])
                TheArray[0] = TheArray[j];
            else
            {
                TheArray[j - 1] = TheArray[j];
            }
        }
        TheArray[size- 1] = TheArray[0];
    }
}

感謝您的任何反饋; 非常感謝。

如果我理解問題陳述,我認為您正在尋找符合以下條件的東西:

void BubbleSort(int theArray[], int size)
{
    for (int i = 1; i < size + 1; i++)
    {
        theArray[0] = theArray[1];
        for (int j = 1; j <= size + 1 - i; j++)
        {
            if (theArray[j] > theArray[0])
            {
                theArray[j-1] = theArray[0];
                theArray[0] = theArray[j];
            }
            else
            {
                theArray[j - 1] = theArray[j];
            }
        }
        theArray[size-i+1] = theArray[0];
    }
}

我認為,所缺少的代碼是,一旦找到新的最大值,就必須將其放回數組中,然后再將新的最大值放入theArray [0]存儲位置(請參見theArray [j-1 ] =比較之后的theArray [0])。 另外,由於最后一個元素將是當前的最大值,因此內部循環每次運行的次數要少一些,因此您不想重新訪問這些數組元素。 (請參閱for(int j = 1; j <= size +1-i; j ++))

為了完整起見,這是我用來(輕輕地)測試它的主要驅動程序:

int main()
{
    int theArray[] = { 0, 5, 7, 3, 2, 8, 4, 6 };
    int size = 7;

    BubbleSort(theArray, size);
    for (int i = 1; i < size + 1; i++)
        cout << theArray[i] << endl;
    return 0;
}

暫無
暫無

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

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