[英]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.