[英]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;
}
}
當i
是n - 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.out
將a.out
替換為您所調用的程序)。
isordered()
應該以return flag
結尾,而不是愚蠢的測試。
ouah的觀點(使循環計數器為bool
而不是int
)也是有效的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.