C語言氣泡排序問題。下面是程式,求每一步的解釋。還有j在裡面是什麼意思

時間 2021-08-11 17:49:43

1樓:monkey家園

①看懂不管什麼**都有一些非常有意思的技巧

②我假設我現在從來沒看過氣泡排序,和你一起分析一下這**

③int a[n]=; //初始化了亂序陣列

int i,j,temp; //嗯?i,j,temp幹嘛的?我暫時不知道,因為我還沒往下看,我先記著有這幾個變數

for (j=0;j<=n-2;j++)

for(i=0;i<=n-j-1;i++)//出現兩個巢狀迴圈,第一個是j從0到n-2 第二個是i從從0到n-j-i,如果沒看後面,我仍然不知道i,j具體要幹嘛,接著看

if (a[i]>a[i+1])

//這句就很明顯了,當a[i]和a[i+1]不是大於關係,就讓他們交換順序,也就用到了之前的temp變數

//換句話說,就是任意相鄰的a[i]和a[i+1]只要不是從小到大的順序,就讓相鄰的元素從小到大

//後面的**我知道,是迴圈並輸出所有陣列內元素

//再回頭分析,我人腦模擬一下,當j=0,i從0到n-1,【從a[0]到a[n-1]之間的相鄰元素會對比換序】

當j=1,i從0到n-2,【從a[0]到a[n-2]之間的相鄰元素會對比換序】

.....

當j=n-2,i從0到1,【a[0]和a[1]對比換序】

結束迴圈

//我們再看一下,每次對比換序會有什麼影響,由於相鄰元素對比換序會導致掃描到的最右邊那個元素為最大值

//所以,當j=0,我們得到了a[n-1]是最大值,j=1得到了a[n-2]是第二大值...依此類推

//等j掃描完了,我們就得到了a[n-1]到a[0]分別是最大值,第二大值,第三大值...最小值

④以上分析隱含了什麼技巧?其實就是《演算法導論》中的一個定理:迴圈不變式

迴圈不變式:當你證明迴圈中i=0,1是對的,以及n是對的,並且都符合同樣的規則,那麼這個迴圈整個就是對的。

同樣,你能用迴圈不變式通過歸納出i=0,1步,n步時的效果,來推斷整體效果。

(類似數學第

一、第二歸納法)

一般分析複雜**分兩種:

迴圈邏輯複雜度分析:要用到迴圈不變式去判定

語義邏輯複雜度分析:要用到諸多編碼技巧和經驗,包括優先順序等等。

2樓:匿名使用者

氣泡排序原理懂不?

你這第一個for迴圈是用來控制執行次數的。。

第二個for迴圈執行目的兩兩比較是大數往後移,這樣第一次是把最大放到最後一位,第二次是第二大數放到最後第二位。。。以此類推

自己體會吧

c語言,氣泡排序那裡,為什麼要定義一個i,一個j他們的用處分別是什麼。還有,j為什麼要=n-1-i

3樓:這個也行服了

冒泡法都是通過兩層迴圈實現,第一層(i)控制趟數,第二層(j)是控制相鄰連個元素比較;

j<(n-1)-i是因為每一趟都能確定一個最大值,所以需要比較的元素就減少了

4樓:匿名使用者

你的問題很古怪,感覺沒有問到點子上,建議你先看演算法原理說明再看程式版,不能先看程式。

定義i、j兩個變數權,是為了對數列進行雙重迴圈操作。

j沒有等於n-1-i,在**中,j

5樓:bboy花小雨

兄弟什麼軟體,這麼6?

6樓:匿名使用者

你**裡不是已經註釋清楚了,i是排序趟次 即做多少趟才能完成冒泡內排序

冒泡法一趟只能找到一個結果(容最大或最小值),放到當前的最後一個位置,所以下一次會少查一個數(n-i-1)

j用來遍歷陣列,相鄰兩個數逐一比較,所以是a[j] 與a[j+1]比較

c語言:求解釋這一段**的意思

7樓:天雲一號

int (*p)[num_cols] 定義一個陣列指標,指向陣列的一個指標,陣列中每個元素是int型。

(*p)[i]=0; 就是將陣列的第i+1個元素置0

8樓:匿名使用者

int (*p)[num_cols];//宣告一個數量為num_cols的指標陣列

(*p)[i] = 0; //設定指標陣列第i個指標為0

c#中下面一段**什麼意思

9樓:捐你妹

這個應該是改寫了以個dialog,然後定義的事件響應。

首先,這個響應是在獲得dialogresult時發出訊息。

其次,這個函式本身將資訊傳送到使用者自定義的dialogresultevent響應函式中。

不過,不理解的是,為什麼要這樣 var dialogresultevent = dialogresultevent;轉一下……

C語言氣泡排序問題,c語言氣泡排序問題!?

文文的鵬鵬 lz的排序方法是錯誤的。比如,輸入8 6 12 0,按照lz的演算法,最終的排序結果是6 8 12 0。lz的演算法只能保證每相鄰的兩個數小在前大在後,但整體結果並不是這樣,所以排序還是要雙重迴圈的。 排序方法挺多的,各有各的優缺點的,有些人只是習慣了用某一個而已。 哈哈,可以用選擇排序...

c語言氣泡排序問題!請高手解決,C語言氣泡排序。

永星天恆 include int main void for i 0 i 5 i printf d a i 輸出排好的數字 printf n return 0 include void maopao int 函式宣告int main void maopao int p include include...

C語言問題求解如圖謝謝氣泡排序法這個j10 i 1為什麼j要小於N i?是什麼意思

再醉不逍遙 裡面的for迴圈完成一次迴圈,就將最大值轉移到最後,那麼下一次 外面for 就要排除最後已經得到的最大值,在剩下的值中再次得到最大值並轉移到最後。每一次冒泡後,都要少比較一個資料,比如 4 5 2 1 一次冒泡得 4 2 1 5 二次冒泡得 這時只要遍歷3個 4 2 1 2 1 4 51...