簡體   English   中英

C中的冒泡排序程序

[英]Bubble sort program in c

我在c中為氣泡排序程序編寫了以下代碼: http : //pastebin.com/Jtcpn59U

但是,氣泡排序功能似乎無法正常工作。 一旦我按照getArray()函數的提示輸入了數組值,程序就會進入空閑狀態。 有人知道出什么事了嗎?

注意程序的這一部分:

for(i=0;i<n;i++)
 {
            if(a[i]>a[i+1])
            {
                           temp=a[i];
                           a[i]=a[i+1];
                           a[i+1]=temp;
            }
 }

當您編寫if(a[i]>a[i+1]) ,a [i + 1]會尋找不存在的位置! 只需將for循環限制為小於n-1即可:

for(i=0;i<n-1;i++)

代替for(i=0;i<n;i++)

希望這會起作用! :)

 bool flag, i;
 flag=TRUE;
 for(i=0;i<n;i++)
 {
     if(a[i]>a[i+1])
     flag=FALSE;
 }

bool類型足夠大,可以存儲值0或1,但是您將i對象用作索引變量。

然后在bubbleSort函數中:

 for(i=0;i<n;i++)
 {
     if(a[i]>a[i+1])
     {
         temp=a[i];
         a[i]=a[i+1];
         a[i+1]=temp;
     }
 }

in - 1您正在訪問a[n - 1]a[n]但是a[n]在數組之外。 記住數組是0起源的:最后一個數組元素是a[n - 1]

bubbleSort()本身具有非法的內存訪問權限,因為循環變量i從0到n-1,但是您訪問a[i+1] 但這不會導致它閑置。

在發生同樣的問題isordered()並可能導致它總是返回FALSE -可能你的無限遞歸的原因。

要解決上述兩個問題,請在循環中訪問i+1任何位置將循環限制減小為n-1 要自己查看錯誤,請使用valgrind運行(即,如果將其安裝在您的計算機上,請執行valgrind a.outa.out替換為您所調用的程序)。

isordered()應該以return flag結尾,而不是愚蠢的測試。

ouah的觀點(使循環計數器為bool而不是int )也是有效的。

暫無
暫無

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

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