冒泡和選擇排序的區分,氣泡排序和選擇排序有什麼區別,具體一些謝謝啦

2022-11-03 21:45:24 字數 5720 閱讀 5452

1樓:厭食是家人

區別在於:在交換的方式上

冒泡演算法,每次比較如果發現較小的元素在後面,就交換兩個相鄰的元素。

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

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

例如:1 2 3 4我們分別用a[0],a[1],a[2],a[3]儲存。假設從大到小排序

選擇排序,是a[0]和a[1],a[2],a[3]依次比較,遇到小的就交換,這樣一次下來,最大的被儲存在了a[0].下次排序就從a[1]開始重複以上步驟。

氣泡排序,是a[0]和a[1]比較,小的就交換。然後a[1]和a[2]比較,小的交換。然後a[2]和a[3]比較小的就交換。

這樣一次下來,最大的被儲存在a[0]。下次排序從a[1]開始重複以上步驟。

雖然差不多,但是請注意:兩者的比較方法是右差別的,一個事依次比下來,一個是倆倆比較。

2樓:韓娛

選擇排序只是改進了氣泡排序

冒泡時相鄰兩個元素比較後,如果滿足條件就會交換兩個元素的位置而在選擇排序時,比較大小後不會馬上交換位置,而是記錄最小值(或最大值)的位置,最後在進行一次交換

總體來說,氣泡排序和選擇排序比較,交換的次數從o(n^2)級別減少到o(n)

來自 火星譯客

氣泡排序和選擇排序有什麼區別,具體一些謝謝啦

3樓:匿名使用者

氣泡排序採取從左到右相鄰兩個比較交換,可以計算出逆序數。

選擇排序則是改值依次與後面的進行比較交換。

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

4樓:獨行者

是這樣的

區別主要在交換的方式上

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

但是對於每一輪

比如第一輪

要把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)

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

5樓:匿名使用者

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

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

6樓:匿名使用者

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

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

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

氣泡排序和選擇排序的區別

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樓:今年的冬天沒有下雪

區別在於:在交換的方式上

冒泡演算法,每次比較如果發現較小的元素在後面,就交換兩個相鄰的元素。

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

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

例如:1 2 3 4我們分別用a[0],a[1],a[2],a[3]儲存。假設從大到小排序

選擇排序,是a[0]和a[1],a[2],a[3]依次比較,遇到小的就交換,這樣一次下來,最大的被儲存在了a[0].下次排序就從a[1]開始重複以上步驟。

氣泡排序,是a[0]和a[1]比較,小的就交換。然後a[1]和a[2]比較,小的交換。然後a[2]和a[3]比較小的就交換。

這樣一次下來,最大的被儲存在a[0]。下次排序從a[1]開始重複以上步驟。

雖然差不多,但是請注意:兩者的比較方法是右差別的,一個事依次比下來,一個是倆倆比較。

9樓:一頁凌風

例如:1 2 3 4我們分別用a[0],a[1],a[2],a[3]儲存。假設從大到小排序

選擇排序,是a[0]和a[1],a[2],a[3]依次比較,遇到小的就交換,這樣一次下來,最大的被儲存在了a[0].下次排序就從a[1]開始重複以上步驟。

氣泡排序,是a[0]和a[1]比較,小的就交換。然後a[1]和a[2]比較,小的交換。然後a[2]和a[3]比較小的就交換。

這樣一次下來,最大的被儲存在a[0]。下次排序從a[1]開始重複以上步驟。

雖然差不多,但是請注意:兩者的比較方法是右差別的,一個事依次比下來,一個是倆倆比較。

10樓:匿名使用者

冒泡的邏輯是把元素嚮應有的位置移動

選擇是尋找特定位置所對應的元素。

冒泡最壞的情況複雜度才是o(n^2) 選擇平均複雜度就是o(n^2) 但是冒泡的最壞情況處理要比選擇慢。

11樓:

區別在於:冒泡演算法,每次比較如果發現較小的元素在後面,就交換兩個相鄰的元素。而選擇排序演算法的改進在於:

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

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

氣泡排序和選擇排序有什麼不同

12樓:酚跋首

先上選擇法和冒泡法:

選擇法#include

void main()

int i,j,min,temp;

int a[10];

printf("請輸入十個整數:");

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

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

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

min=i;

for(j=i+1;j<=9;j++)

if(a[min]>a[j])

min=j;

temp=a[j];

a[j]=a[min];

a[min]=temp;

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

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

2.冒泡法

#include

void main()

int i,j,temp;

int a[10];

printf("請輸入十個整數:");

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

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

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

for(j=9;j>i;j--)

if(a[j]temp=a[j];

a[j]=a[j-1];

a[j-1]=temp;

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

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

temp=a[j];

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

a[j+1]=temp;

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

深刻了解!!!

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

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

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

相同點:

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

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

不同點:

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

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

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

c語言中,氣泡排序和選擇排序的區別是什麼?

13樓:玉旎機昊

總之就是氣泡排序是比較相鄰兩個數的大小然後直接換位置,而選擇排序是先找到最值然後再將最值放到相應的位置

冒泡法和選擇排序

14樓:

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

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

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

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

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

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

關於氣泡排序法的程式,氣泡排序法是如何排序的???

bubble中第2個for迴圈最後p 應為i 之誤。修改後程式為 include using namespace std void bubble int v,int size int main int len sizeof vn sizeof int for int i 0 iv i 1 列印語句挪...

c 程式設計用函式實現排序演算法(氣泡排序 插入排序)

include using namespace std template void bubble t arr,int n for i 0 i void insert t arr,int n 插入排序 int i,j,pos t temp for i 0 i include using namespa...

對一組無序數進行遞增排序 使用氣泡排序和快速排序,比較它們的排序用時

氣泡排序 void bubblesort int data,size t size if ordered break void quicksort int data,size t left,size t right while j p data j pivot j if j p data p piv...