我這個c語言的冒泡法是哪裡出了問題

2022-10-02 02:25:02 字數 5049 閱讀 6900

1樓:聽不清啊

#include

#include

#include

main()

{ int flag,temp,i,j,a[20];

srand((unsigned)time(null));

printf("before sorting...\n");

for(i=0; i<20; i++)

{ a[i]=rand()%100;

printf("%3d",a[i]);

for(i=0; i<19; i++)

{ flag=0;

for(j=0; j<19-i; j++){ if(a[j]{ temp=a[j];

a[j]=a[j+1];

a[j+1]=temp;

flag=1;

if(flag==0)

break;

printf("\nafter sorting...\n");

for(i=0; i<20; i++)

printf("%3d",a[i]);

2樓:死心機綠茶

#include

#include

#include

void main()

}if(flag==0)

break;

}printf("after sorting...\n");

for(i=0;i<20;i++)

printf("%4d",a[i]);}

這個c語言的氣泡排序法**錯了?請大神看看

3樓:匿名使用者

第二層迴圈的開始初始化語句錯誤了,改為for(j=n-i-1;j>i;--j),這裡如果i=0,你的程式中就取到了a[n],這個位址顯然是非法的

4樓:匿名使用者

i=0時,j=5 a[5]沒有值啊,內部迴圈的j的賦值錯了,你再看看

c語言氣泡排序。

5樓:大野瘦子

#include

void main()

printf("the sorted numbers:\n");

for(i=0;i<10;i++)

printf(" %d",a[i]);

}氣泡排序演算法的運作

1、比較相鄰的元素。如果第乙個比第二個大(小),就交換他們兩個。

2、對每一對相鄰元素作同樣的工作,從開始第一對到結尾的最後一對。這步做完後,最後的元素會是最大(小)的數。

3、針對所有的元素重複以上的步驟,除了最後已經選出的元素(有序)。

4、持續每次對越來越少的元素(無序元素)重複上面的步驟,直到沒有任何一對數字需要比較,則序列最終有序。

簡單的表示

#include

void swap(int *i, int *j)int main()

;int i,j;

for (i = 0; i < 10; i++)}}for (i = 0; i < 10; i++)return 0;}

6樓:匿名使用者

//以下以四個數字的給舉例,便於理解;

#include

main()

; //定義陣列,陣列是本次要排序的數字組合;注意此處陣列中一共4個數字所以 理論上是 a[4]=;

//初試化i=1;並判斷i是否小於等於3; 如果符合條件 那麼進入for迴圈;(4個數字,兩兩對比需要進行3輪對比,i就代表了輪數;i需要經過 1,2,3 三輪的賦值;i=4的時候會跳出for迴圈)

for(i=1; i<=3; i++)}}for(i=0; i<4; i++)

}/*執行結果如下:

第 1個數字為:3

第 2個數字為:6

第 3個數字為:10

第 4個數字為:30*/

7樓:性煥老澹

這是優化後的演算法,如果陣列已有序,則沒有執行到

tag=1;所以退出迴圈,避免做無用功

8樓:碎裂什麼捏

#include

int main()

for(i=1;i<=a;i++) }

}for(i=1;i<=a;i++)

return 0;}

9樓:祖任練易蓉

你的程式裡排序時是按照大數存到低位址,

小數存到高位址,輸出時是先輸出高位址,後輸出低位址,所以輸出的數是公升序。而有錯位是因為輸出的格式是乙個「%d\t」,未給定數值的位寬。即456佔三個字元,而78是兩個字元。

10樓:哇哎西西

氣泡排序的思想:

首先,從表頭開始往後掃瞄陣列,在掃瞄過程中逐對比較相領兩個元素的大小。

若相鄰兩個元素中,前面的元素大於後面的元素,則將它們互換, 稱之為清去了乙個逆序。在掃瞄過程中,不斷地將兩相鄰元素中的大者往後移動,最後就將陣列中的最大者換到了表的最後,這正是陣列中最大元素應有的位置。

然後,在剩下的陣列元素中(n-1個元素)重複上面的過程,將次小元素放到倒數第2個位置。不斷重複上述過程,直到剩下的陣列元素為0為止,此時的陣列就變為了有序。假設陣列元素的個數為西,在最壞情況下需要的比較總次數為:

(n-1)+(n- 2)...+2+1)- n(n-1)/2。

源**如下

冒泡法排序:

#include

int main ()

for (j = 0;j < 9; j++)for (i = 0; i < 9 - j; i++)if (a[i] > a[i+1])

printf ("由小到大的順序為:\n");

for (i = 0; i < 10; i++)printf ("\n");

return 0;

} 執行結果

請輸入十個數:

a[1]=7

a[2]=8

a[3]=9

a[4]=6

a[5]=5

a[6]=4

a[7]=1

a[8]=2

a[9]=3

a[10]=99

由小到大的順序為:

1,2,3,4,5,6,7,8,9,99,

c語言中冒泡法是什麼意思?

11樓:過昊巫文敏

冒泡法是一種排序方法

冒泡法  543

21比如上面這5個數字我們把它按照由小到大的順序排列,從前往後相臨兩位比較大小,如果前一位比後一位大就把它倆換位,5比4大就把5和4換位,得到453215又比3大

5和3換位

得到43521

依次類推最後得到

43215

這樣就把最大的乙個數字移到最後面了

然後不看5

,剩下4321

再用上面的方法把4移動到最後

得到32145

在不看45

剩下321

把3移動到

最後,依此類推。

最終得到12345

這就是冒泡法,是計算機程式設計排序中最簡單快捷的方法。

除此意外我還能寫出許多排序方法,但是效率上都不如冒泡法至於為什麼叫冒泡法呢,你把這幾個數字豎起來看1234

5把最大的數字5看成最大的泡泡,浮到最上,然後4又浮上去,依此類推得到5

4321

所以形象的稱為冒泡法

#include

#include

intmain(void)

for(i1=0;i1<=9;i1++)

for(i2=0;i2<=9-i1;i2++)

12樓:匿名使用者

冒泡法是排序的一種方法,冒泡法和氣泡排序實是乙個定義.之所以叫冒泡法,即是像在水中的氣泡一樣,在一輪兩數比較之後將最小(或最大的數字)排在一列數的左邊(當然右邊也行,總之是一邊).然後排開這個數,經過n-2排開之後,整列數的大小就是按順序來的.

13樓:匿名使用者

交換排序的一種,很適合c語言初學者學習~詳細資訊請參照資料結構中的排序~

c語言氣泡排序降序沒問題,但公升序有問題,我是**做錯了嗎?

14樓:匿名使用者

/*冒泡法的基本思想就是:在待排序的資料中,先找到最小(大)的資料將它放到最前面,

再從第二個資料開始,找到第二小(大)的資料將它放到第二個位置,以此類推,直到只剩下最後乙個數為止。

這種排序方法在排序的過程中,

是小的數就如氣泡一樣逐層上浮,而使大的數逐個下沉,於是就形象地取名為氣泡排序,又名起泡排序

*/#include

#define length 10

int main()

printf("排序後的結果:\n");

for(i=0;iprintf("\n");

return 0;}

15樓:匿名使用者

把sortlist裡的 for j=0;j<=l->size-1-i; ...

改成for j=0;jsize-1-i; ...試試。

哪位高手幫我看一下這個程式那裡出錯了,是關於c語言氣泡排序的(大數下沉),一直排出來?

16樓:星灬花

這樣就ok 啦 一點小錯誤

#include"stdio.h"

void main()

for(i=0;i<=4;i++)

printf("%d\n",a[i]);}

17樓:匿名使用者

沒啥問題,{temp=a[i=1]; 這裡的=號應該是+號吧 ,你這個是小數下沉法……

關於c語言冒泡法的乙個問題?

18樓:

for(j=0;)這個迴圈的作用是啥

第九個不賦值就是0囉,0和別的比就被對換位置了唄

19樓:囚江子非魚

你是在寫冒泡法嗎?你寫的這個演算法不太對啊

C語言 編寫函式用氣泡排序法對陣列中的資料進行從小到大的排序

int i,j,temp for i 0 ia j 1 之間寫這個 編寫函式用氣泡排序法對陣列中的n個資料進行從小到大的排序。1 新建乙個163.php。2 輸入php網頁的結構 3 宣告php與瀏覽器互動的檔案型別和編碼。4 使用 array 函式定義乙個 numbers陣列。5 使用 sort ...

c語言中這個符號的意思是,請問下C語言中這個符號是什麼意思?

就是.也就是當前目錄 是 的轉義 是轉義 的意思.一般在路徑值中使用.所以 就是 表示目錄的.指當前工程目錄.c語言中 這個符號的意思是?就是.是轉義 意思是 所以這個就是.表示當前目錄 僅適用於windows 請問下c語言中 這個符號是什麼意思?是邏輯符號或。是連線符,不是換行,define需要定...

c語言這個題為什麼b是對的d是錯的

028.5e 3 可以,但加上bai 0xf 就組成du了表示式,0xf 是16進製制常數。0003.e5 等同 zhi 0003.0e5,等同 3.0e5 是數值常量dao.b 的 2個 數用專 逗號分隔,屬前面是合法的16進製製數,後乙個是 e 格式的常數。解這道題需要管什麼數字是什麼進 制麼?...