本文目錄一覽:
- 1、C語言冒泡排序降序沒問題,升序有問題,為什麼?
- 2、C語言冒泡排序加解題思路?
- 3、C語言冒泡排序可以設置要升序還是降序嗎?
- 4、請高手精細地講解C語言的冒泡排序法,解釋每個語句,以及升序和降序問題?
C語言冒泡排序降序沒問題,升序有問題,為什麼?
第1,冒泡演算法是沒有問題的,這是經過時間驗證的演算法。如果你的實現出了問題,肯定是你的實現有問題。
第2,單給一個結果,是看不出原因的。只能猜測是你的實現里,鏈表越界了。所以,你要想讓別人幫你分析,就需要把源碼發出來。
C語言冒泡排序加解題思路?
冒泡排序,就是對一組數進行逐趟排序的方法,具體分為升序和降序。
以升序為例。
每一趟的任務,就是從一組數的第一個數開始,依次比較相鄰的兩個數的大小。既然是升序,那麼比較後,如果前者大於後者,那麼兩者交換位置。就這樣依次地比下去。
這樣的話,第一趟就把最大的數排到了最後。
而每再比較一趟的時候,都排除已經生成的結果,比如第二趟,不會再比較最後一個數(它已經是最大的了,當然如果比較也沒問題,浪費時間而已);第三趟,不會再比較最後兩個數。。。
每一趟都把最大的數排到當前範圍的末尾。
這樣循環下去,每一趟都會把當前範圍內最大的數扔到後面去。排序就完成了。
——————————————————————————————————————————
舉個升序排序的例子:
對於{ 10,5,3,11,9 }這組數,
第一趟,10與5比較,10 比5大,所以互換位置(5,10,3,11,9),10和3比較,103,所以互換位置(5,3,10,11,9),10與11比較,不用互換位置;11與9比較,互換位置(5,3,10,9,11),第一趟結束;
第二趟,由於11已經是最大的,那麼只剩下{5,3,10,9};53,所以互換位置(3,5,10,9);510,不用互換位置;109,互換位置(3,5,9,10),第二趟結束。
第三趟,只剩下{3,5,9},35,不用互換位置;59,不用互換位置,第三趟結束。
第四趟,只剩下{3,5},35,不用互換位置,第四趟結束。
此時由於只剩兩個數,本趟已經把兩個數較大的一個放到了第二的位置,所以循環到此結束。
結果就是{3,5,9,10,11}。
過程中,每一趟都會把相鄰的兩個數中較大的換到後面,即每趟中,最大的數都會被置換到最後,就像一個氣泡浮出水面一樣,越來越大,到出水時就是最大的。所以才叫冒泡排序。
C語言冒泡排序可以設置要升序還是降序嗎?
可令flag為相鄰兩數判斷時乘上的係數,升序時為1,降序時為-1
這樣 -a -b 即等價於 a b,就可將升序變為降序
具體代碼和運行結果如下:
可見同一個函數,flag=1時實現了升序,flag=0時實現了降序,望採納~
附源碼鏈接:冒泡排序
請高手精細地講解C語言的冒泡排序法,解釋每個語句,以及升序和降序問題?
例:int a[10] ; //設有10個元素的int型數組
int i = 0 , j = 0 , n = 0;
for( i = 0 ; i 9 ; i++ ) //外層循環最大值為數組大小減一
{
for( j = i+1 ; j 10 ; j++ ) //內層循環從外層循環的後面一
//個數(j=i+1)開始,到最後
{
if( a[i] a[j] ) //該比較大小所示為升序。
//若a[i] a[j] ,交換的話,為降序。(前大升,後大降)
{
n = a[i] ;
a[i] = a[j] ; //交換
a[j] = n ;
}
}
} //完成
編程,不會就問,很好!但,更重要的是,必須自己先好好想過之後,還不明白,再問,再查資料(很重要)。呵呵···
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/240237.html