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...