簡體   English   中英

C中的自定義氣泡排序

[英]Custom Bubble Sort in C

我試圖了解我的代碼有什么問題,但是我是C語言的初學者,但是我在Java中進行了大量編程。 我使用8個整數對氣泡排序進行了自己的“惰性”實現,但是這會導致無限循環。

一些解釋:嘗試對8個最大到最小的整數進行排序,並使用計數器確定何時對所有值進行排序

#include <stdio.h>
int main()
{
int array[8];
int counter =0;
int storage=0;
int i;
printf("Please enter 8 numbers:");
scanf("%d%d%d%d%d%d%d%d",&array[0],&array[1],&array[2],&array[3],&array[4],&array[5],&array[6],&array[7]);
while (counter!=7)
{
    counter =0;
for (i=0; i<=6;i++)
{
    if (array[i]<=array[i++])
    {
        storage = array[i];
        array[i]= array[i++];
        array[i++]= storage;
    }
    else
    {
        counter++;
    }
}
}
printf("%d%d%d%d%d%d%d%d",array[0],array[1],array[2],array[3],array[4],array[5],array[6],array[7]);

}

您需要從以下位置更改以下代碼:

if (array[i]<=array[i++])
{
    storage = array[i];
    array[i]= array[i++];
    array[i++]= storage;
}

if (array[i]<array[i+1])//++ is post increment operator and you are changing index value with every comparison and assignment
{
    storage = array[i];
    array[i]= array[i+1];
    array[i+1]= storage;
}

無限循環的原因還在於,當您交換兩個元素時,不會增加計數器的值。 因此,無論是否交換兩個元素,都應將其從其他部分刪除,並使其在for循環中通用。 否則,您可能會遇到while (counter != 0) {counter = 0; ...} while (counter != 0) {counter = 0; ...}因此,它就像修改氣泡排序一樣。

如果阻止則切換此錯誤

if (array[i]<=array[i++])
{
    storage = array[i];
    array[i]= array[i++];
    array[i++]= storage;
}

如果您要升序 ,請按此方塊排列

if (array[i]>array[i+1])
{
    storage = array[i];
    array[i]= array[i+1];
    array[i+1]= storage;
}

或按以下順序排列 (如果要降序排列) (請注意if條件)

if (array[i]<array[i+1])
{
    storage = array[i];
    array[i]= array[i+1];
    array[i+1]= storage;
}

並更改最后一個printf() ,以便通過在整數之間添加空格來獲得正確且可讀的輸出

printf("%d %d %d %d %d %d %d %d\n",array[0],array[1],array[2],array[3],array[4],array[5],array[6],array[7]);

暫無
暫無

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

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