寫排序的幾種演算法,簡單選擇排序,直接插入排序,氣泡排序,詳細點

2022-02-14 13:46:19 字數 5470 閱讀 9479

1樓:匿名使用者

樓主留郵箱吧,我給你發過去

2樓:匿名使用者

//插入

void insert_sort(int a,int n)}// 冒泡

int bubble_sort(int a,int n)}}//選擇

int select_sort(int a,int n)}tmp=min;

a[min_i]=a[i];

a[i]=tmp;}}

選擇排序演算法與氣泡排序演算法有何異同啊?

3樓:今年的冬天沒有下雪

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

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

而選擇排序演算法的改進在於:先並不急於調換位置,先從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]開始重複以上步驟。

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

4樓:一頁凌風

例如: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]開始重複以上步驟。

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

5樓:匿名使用者

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

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

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

6樓:

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

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

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

排序演算法的實現與比較 程式設計實現直接插入排序、希爾、氣泡排序、快速、選擇排序演算法,並計算每種排序演算法的

7樓:天上一堆星

資料結構那本書上邊也有講,都很簡單,一看就能懂~

8樓:匿名使用者

看下《演算法導論》排序章節 就知道了

以下排序演算法最壞情況下時間複雜度最低的是 a.氣泡排序 b.插入 c.選擇 d.快排

9樓:木頭釋然

在氣泡排序,插入排序,選擇排序,快速排序中,在最最壞情況下,快速排序的時間複雜為o(n2) ,插入排序o(n2),選擇排序o(n2),氣泡排序o(n2)。所以abcd時間複雜度是一樣的。

在快速排序演算法中,最為關鍵的就是選取乙個基值,將陣列分為大於基值以及小於基值兩部分,並返回基值所以在位置以利用於遞迴劃分。

對陣列a,設需要劃分的其中一段為a[p]~a[r],我們期待的結果是得到乙個q,其中p<=q<=r,使得a[p]~a[q-1]<=a[q]<=a[q+1]~a[r],這個時候原先的一段陣列被分成了三部分。

首先,設基值為這段陣列的最後乙個元素a[r],我們希望最後得到的結果是a[r]現在對應的值在演算法結束後可以排在比他大和小的兩部分的中間愛。

然後令i=p-1; j=p,當發現有a[j]>x時,j繼續前進,不需要任何移動。當發現a[j]<=x時,我們需要將這個元素放到小於基值的一邊,於是將i自加1,並交換此時a[i],與a[j]的元素,然後j自加1。這個時候i指向的是比基值小的那段資料的最後乙個元素,j指向的是第乙個還沒有判斷的剩餘元素。

上面一步不斷迴圈直到j指向了r,此時只剩下r沒有和基值判斷了,而a[r]本來就是基值,而除了a[r]以外,a[p]~a[i]是小於基值的部分,a[i+1]~a[r-1]是大於基值的部分,所以此時只需交換a[i+1]和a[r]即可。

由於對陣列a從頭到尾掃瞄一次就可以得到結果,因此這一部分演算法複雜度為o(n)

10樓:匿名使用者

1.選擇排序:不穩定,時間複雜度 o(n^2)

選擇排序的基本思想是對待排序的記錄序列進行n-1遍的處理,第i遍處理是將l[i..n]中最小者與l[i]交換位置。這樣,經過i遍處理之後,前i個記錄的位置已經是正確的了。

2.插入排序:穩定,時間複雜度 o(n^2)

插入排序的基本思想是,經過i-1遍處理後,l[1..i-1]己排好序。第i遍處理僅將l[i]插入l[1..

i-1]的適當位置,使得l[1..i] 又是排好序的序列。要達到這個目的,我們可以用順序比較的方法。

首先比較l[i]和l[i-1],如果l[i-1]≤ l[i],則l[1..i]已排好序,第i遍處理就結束了;否則交換l[i]與l[i-1]的位置,繼續比較l[i-1]和l[i-2],直到找到某乙個位置j(1≤j≤i-1),使得l[j] ≤l[j+1]時為止。圖1演示了對4個元素進行插入排序的過程,共需要(a),(b),(c)三次插入。

3.氣泡排序:穩定,時間複雜度 o(n^2)

氣泡排序方法是最簡單的排序方法。這種方法的基本思想是,將待排序的元素看作是豎著排列的「氣泡」,較小的元素比較輕,從而要往上浮。在氣泡排序演算法中我們要對這個「氣泡」序列處理若干遍。

所謂一遍處理,就是自底向上檢查一遍這個序列,並時刻注意兩個相鄰的元素的順序是否正確。如果發現兩個相鄰元素的順序不對,即「輕」的元素在下面,就交換它們的位置。顯然,處理一遍之後,「最輕」的元素就浮到了最高位置;處理二遍之後,「次輕」的元素就浮到了次高位置。

在作第二遍處理時,由於最高位置上的元素已是「最輕」元素,所以不必檢查。一般地,第i遍處理時,不必檢查第i高位置以上的元素,因為經過前面i-1遍的處理,它們已正確地排好序。

4.堆排序:不穩定,時間複雜度 o(nlog n)

堆排序是一種樹形選擇排序,在排序過程中,將a[n]看成是完全二叉樹的順序儲存結構,利用完全二叉樹中雙親結點和孩子結點之間的內在關係來選擇最小的元素。

5.歸併排序:穩定,時間複雜度 o(nlog n)

設有兩個有序(公升序)序列儲存在同一陣列中相鄰的位置上,不妨設為a[l..m],a[m+1..h],將它們歸併為乙個有序數列,並儲存在a[l..h]。

6.快速排序:不穩定,時間複雜度 最理想 o(nlogn) 最差時間o(n^2)

快速排序是對氣泡排序的一種本質改進。它的基本思想是通過一趟掃瞄後,使得排序序列的長度能大幅度地減少。在氣泡排序中,一次掃瞄只能確保最大數值的數移到正確位置,而待排序序列的長度可能只減少1。

快速排序通過一趟掃瞄,就能確保某個數(以它為基準點吧)的左邊各數都比它小,右邊各數都比它大。然後又用同樣的方法處理它左右兩邊的數,直到基準點的左右只有乙個元素為止。

幾種排序的時間複雜度,可以參考一下

11樓:匿名使用者

這幾個的最壞情況下的時間複雜度都是一樣的,一定要比較的話快排比較快,但氣泡排序比較穩定,最壞的話都是一樣的

12樓:匿名使用者

顯然都一樣,如果論平均時間就是快排最快o(nlogn),其餘的都是o(n^2),但快排最壞時間也是o(n^2)

13樓:匿名使用者

最壞的情況下好像都是n^2吧。

輸入乙個陣列,按從大到小的順序排序(提示:可使用選擇排序,氣泡排序或插入排序的任何一種)

14樓:匿名使用者

選擇排序:選擇法排序是一種簡單的容易實現的對資料排序的演算法。

以整形陣列元素為例,有陣列a[10](以c語言為例描述),即a[0],a[1],…,a[8],a[9](假設其元素均互不相同)。要求對其元素排序使之遞增有序。

首先以乙個元素為基準,從乙個方向開始掃瞄,比如從左至右掃瞄,以a[0]為基準。

接下來從a[0],…,a[9]中找出最小的元素,將其與a[0]交換。

然後將基準位置右移一位,重複上面的動作,比如,以a[1]為基準,找出a[1]~a[9]中最小的,將其與a[1]交換。

一直進行到基準位置移到陣列最後乙個元素時排序結束(此時基準左邊所有元素均遞增有序,而基準為最後乙個元素,故完成排序)。

以下為乙個用c描述的函式實現上述排序:

void sort(int array,int n)

}printf("排序結果:");

for( i = 0; i < 10; i ++ ) //依次輸出排序結果

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

printf("\n");

}pascal為例子

procedure bubble_sort(var l:list);

vari,j:position;

begin

for i:=first(l) to last(l)-1 do

for j:=first(l) to last(l)-i do

if l[j]>l[j+1] then 4 swap(l[j],l[j+1]);

//交換l[j]和l[j+1]

end;

下面使用c++語言編寫

#include

void main()

cout<

}c語言中的排序方法選擇方法是首先從要選擇的數中選擇最大(或最小)的數,將它放在第乙個位置,然後從剩下的數中選擇最大(或最小)的數放在第二個位置,直到最後從剩下的兩個數中選擇最大(或最小)的數放在倒數第二個位置,剩下的乙個數放在最後位置,完成排序。

15樓:無眠之神

用什麼語言好歹說一下吧!

下面排序演算法在輸入資料逆序情況下排序速度最快 a歸併排序 b直接插入排序 c氣泡排序 d簡單選擇排序

16樓:夢路繼續走

a歸併排序 時間複雜度o(nlogn)

逆序輸入冒泡和直接插入最壞情況 時間複雜度o(n^2)

簡單選擇排序與輸入順序無關 時間複雜度o(n^2)

在下列排序演算法中,哪演算法的時間複雜度與初始排序無關

d不管原陣列是什麼樣子,每一次你都要遍歷一邊剩餘的數來選取最大 最小值 演算法的時間複雜度與初始排序無關的都有什麼排序 常見的幾種排序演算法複雜度如下 方式 平均 最壞 最好 插入 n 回2 n 2 n 希爾 n 1.3 冒泡 n 2 n 2 n 快速 nlogn n 2 nlogn 選擇 n 2 ...

新手求助,各種排序演算法時間效能的比較

插入排序 氣泡排序,選擇排序 o n n 歸併排序,快速排序 o nlgn 幾何畫板和geogebra比較,哪個好用?如果好用是指 ai 作難度,他倆基du本zhi相當,都很簡單學會dao。如果好用專是看哪個功能 屬強大,就各有特色了。幾何畫板是國家教育部推廣的應用軟體,應用範圍更廣,可以借鑑的資源...

幾種排序的時間複雜度,各種排序法的時間複雜度到底多少

氣泡排序是這樣實現的 首先將所有待排序的數字放入工作列表中。從列表的第乙個數字到倒數第二個數字,逐個檢查 若某一位上的數字大於他的下一位,則將它與它的下一位交換。重複2號步驟,直至再也不能交換。氣泡排序的平均時間複雜度與插入排序相同,也是平方級的,但也是非常容易實現的演算法。選擇排序 選擇排序是這樣...