冒泡法和選擇排序,氣泡排序與選擇排序有什麼區別

2022-01-01 06:30:07 字數 3271 閱讀 6985

1樓:

冒泡和快速排序的區別在於:冒泡演算法,每次比較如果發現較小的元素在後面,就交換兩個相鄰的元素。將待排序的元素看作是豎著排列的"氣泡",較小的元素比較輕,從而要往上浮。

在氣泡排序演算法中我們要對這個"氣泡"序列處理若干遍。所謂一遍處理,就是自底向上檢查一遍這個序列,並時刻注意兩個相鄰的元素的順序是否正確。如果發現兩個相鄰元素的順序不對,即"輕"的元素在下面,就交換它們的位置。

顯然,處理一遍之後,"最輕"的元素就浮到了最高位置;處理二遍之後,"次輕"的元素就浮到了次高位置。在作第二遍處理時,由於最高位置上的元素已是"最輕"元素,所以不必檢查。一般地,第i遍處理時,不必檢查第i高位置以上的元素,因為經過前面i-1遍的處理,它們已正確地排好序。

而選擇排序演算法的改進在於:先並不急於調換位置,先從a[1]開始逐個檢查,看哪個數最小就記下該數所在的位置p,等一躺掃瞄完畢,再把a[p]和a[1]對調,這時a[1]到a[10]中最小的資料就換到了最前面的位置。

所以,選擇排序每掃瞄一遍陣列,只需要一次真正的交換,而冒泡可能需要很多次。比較的次數是一樣的。

其實看你宣告的變數的個數就知道了。選擇的要比冒泡的多宣告乙個,用來儲存最小(或最大的)元素的下標。而冒泡的比較後直接換。

2樓:九懷玉第育

氣泡排序和選擇排序都是穩定的排序方法。

不同的地方是處理的過程不一樣。

冒泡是相鄰的兩兩比較,把小的交換上去,每一趟比較都會得到乙個最小值。乙個乙個的就像是冒泡一樣,比較形象。如果在一趟比較中,沒有發現要交換的數值,則排序完成。

選擇排序是從待排序佇列中選出最小的值,放到已排序佇列的後面。

例如待排序隊列為:63

25公升序(冒泡)

第一趟:

第一次比較36

25第二次比較32

65第三次比較32

56第二趟:235

6第三趟:未發現有交換,排序結束

選擇排序:

第一趟:236

5(選出2,放到第一位置上)

第二趟:236

5(選出3,放到第二位置上)

第三趟:235

6(選出5,放到第三位置上)

3樓:唯一

1是冒泡

2是選擇

冒泡是指相鄰兩個數字進行比較

選擇是指以乙個數為參考,然後後面的數字與他做比較,如果比他大就登記他的下標,最後把參考的數字和標記下標的數字進行交換。最終使得第乙個資料是最大的……

4樓:匿名使用者

冒泡法的基本思想:通過相鄰兩個數之間的比較和交換,使排序碼(數值)較小的數逐漸從底部移向頂部,排序碼較大的數逐漸從頂部移向底部。就像水底的氣泡一樣逐漸向上冒,故而得名。正如一程式;

選擇法排序原理:一次選定陣列中的每乙個數,記下當前位置並假設它是從當前位置開始後面數中的最小數(k=i),從這個數的下乙個數開始掃瞄直到最後乙個數,並記錄下最小數的位置(k),掃瞄結束後如果k不等於i,說明假設錯誤,則交換k與i位置上數。如二程式。

5樓:

1選擇 2冒泡

選擇:每次選最小的

冒泡:連續的兩個依次比較

選擇排序法跟氣泡排序法有什麼區別

6樓:go天馬行空

先上選擇法和冒泡法:

1.選擇法

#include

void main()

temp=a[j];

a[j]=a[min];

a[min]=temp;}}

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

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

}2.冒泡法

#include

void main()

}大的氣泡往下沉,小的氣泡往上浮!!!注意:是a[j-1]還是a[j+1];

深刻了解!!!

*/for(i=9;i>=0;i--)

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

} 通過這兩個程式,可以發現他們的程式設計還是有些區別的,但是總結下:

相同點:

1.都要通過n-1組排出具有n個數的順序;

2.都是通過逐個相比,比出最值的;

。。。不同點:

1.冒泡法,顧名思義就是把小的泡冒到上面,大的泡沉到下面,最值在中間和其他的值交換;

而選擇法,是假定了乙個最值,所以最值和其他的值的交換就發生在假定最值的地方;

。。。其實冒泡法和選擇法的區別不大,都是效率比較低的方法。

氣泡排序與選擇排序有什麼區別

7樓:獨行者

是這樣的

區別主要在交換的方式上

每一輪都把最大或最小的元素篩選出來放在相應的位置上這是相同的

但是對於每一輪

比如第一輪

要把1~n 中最大的那個放到n這個位置

冒泡法每次比較和移動相鄰的兩項

而選擇排序每次交換當前項和第n項

我把**寫出來你就懂了:

冒泡:for i:=1 to n-1 doif (a[i]>a[i+1]) then swap(i,i+1);

選擇:for i:=1 to n-1 doif (a[i]>a[n]) then swap(i,n);

(swap 表示交換)

總的來說,兩種排序比較的次數是相同的

但交換的次數,選擇排序是更少的

雖然兩者的時間複雜度都是 o(n^2)

但通常,選擇排序更快一點

8樓:匿名使用者

首先,兩種演算法都是每一輪選出乙個最大(小)值,關鍵是最值存放的位置。區別就是冒泡選出的最值從length-1開始放,然後是length-2,length-3.....(陣列下標),選擇排序選出的最值是從陣列下標0開始放,接著是1,2,3....。

所以演算法才有不同的表現形式。望採納

9樓:匿名使用者

冒泡,選擇,希爾...等排序演算法是前輩們總結出來的經典排序演算法,它們各有自己的優缺點,適合不同情況下使用。比如氣泡排序實現起來簡單,如果待排序資料量小,並且對效率要求不高時,完全可以滿足;希爾排序效率比冒泡高,但是演算法實現稍複雜,一般人們不願意去實現它。

我認為排序演算法的根本區別是它們排序的效率,就是排序消耗的時間和空間。你如果要比較氣泡排序和選擇排序的區別,就去分析它們排序時分別占用的時間和空間。老實說,這些內容演算法書都有講解,但是我從來沒有認真去研究分析過,也沒有真的去計算過乙個演算法的效率值!

如果那位對這方面熟悉,不妨幫 @飛行蘇 計算下。 不過根據對演算法的理解,氣泡排序的效率不會大於選擇排序

C語言氣泡排序原理,C語言氣泡排序。

include void main printf the sorted numbers n for i 0 i 10 i printf d a i 氣泡排序演算法的運作 1 比較相鄰的元素。如果第乙個比第二個大 小 就交換他們兩個。2 對每一對相鄰元素作同樣的工作,從開始第一對到結尾的最後一對。這步...

用matlab程式冒泡法對數由小到大排序

冒泡法對10個數由小到大排序 a rand 1,10 隨機生成一組數 a 未排序前原始資料 n 10 陣列長度 for j 1 n 1 for i 1 n 1 if a i a i 1 c a i a i a i 1 a i 1 c endend enda 排序後陣列顯示 資料拓展 冒泡法排序原理 ...

用冒泡法對整數排序。整數用scanf函式輸入

舉了例子 乙個陣列 3,2,5,1,4從小到大排序 從左側開始,逐對比較 3 2,交換3,2的位置,陣列變為2,3,5,1,43 5,順序不變 5 1,交換5,1的位置,陣列變為2,3,1,5,45 4,交換5,4的位置,陣列變為2,3,1,4,5至此,陣列中最大的數被放在最右側了,接下來只要在前四...