氣泡排序 選擇排序 插入排序三種基礎排序的比較

2021-10-23 05:49:28 字數 1647 閱讀 5854

排序在計算機中是很基礎並且是十分重要的問題,但由於排序有可能非常耗時,所以它已經成為了電腦科學中廣泛研究的課題。對此僅僅討論一些簡單的排序演算法,氣泡排序,選擇排序,插入排序。對此只是自己學習的乙個記錄。

例如:有一群公升高不盡相同的人站成一排,我們想要通過某種方法,將他們排成一列公升高有序的隊伍(例如:從低到高)。在排序這件事上我們人與計算機相比有以下優勢,我們可以看到周圍所有的隊員並且立刻找出最高的乙個,而不用費力地測量和比較每個人的身高。而且,隊員們不一定要固守特定的 空間,他們可以相互推推操操就騰出了位置,還能互相前後站立。經過一些具體的調整,就可以毫 不費力地給隊員們排好隊。電腦程式卻不能像人這樣通覽所有的資料。它只能根據計算機的「比較」操作原理,在同一 時間內對兩個隊員進行比較。演算法的這種「管視"將是乙個反覆出現的問題。在人類看來很簡單的 事情,計算機的演算法卻不能看到全景,因此它只能一步一步地解決具體問題和遵循一些簡單的規則。

計算機實現方法一:每次和從第乙個人開始,依次與相鄰的人比較,如果比旁邊的乙個人矮則交換位置,否則不變。假設有10個人,第一次比較是第乙個人與第二個人比較,如果第二個人高於第乙個人則不改變位置,否則交換,依次這樣。

//氣泡排序 

#include "stdio.h"

#define n 1000

int main ()

int j,k;

for(j = 0;jfor(i=0;iprintf(

"\n");

}

我們可以發現,排序主要的過程就是比較,然後交換位置。程式需要進行比較的次數為外層迴圈n次,內層迴圈隨著外層迴圈的改變而改變,計算得到的次數為n*(n-1)/2次。如果是最差的情況則每次都要交換,因此交換所需要的次數也為n*(n-1)/2次。

//選擇排序 

#include "stdio.h"

#define n 10000

int main(

) for(j=0;j} //交換

int temp = a[j]

; a[j]

= a[min]

; a[min]

= temp;

} for(i = 0;iprintf(

"\n");

}

選擇排序改進了氣泡排序,將必要的交換次數從o(n2)減少到0(n)=不幸的是比較次數仍保持 為o(n2)o然而,選擇排序仍然為大記錄量的排序提出了乙個非常重要的改進,因為這些大量的記 錄需要在記憶體中移動,這就使交換的時間和比較的時間相比起來,交換的時間更為重要。

//插入排序 

#include "stdio.h"

#define n 1000

int main(

) for(out = 1;outa[in]

= temp;

} //輸出

for(i = 0;iprintf(

"\n");

}

雖然插入排序的時間複雜度為o(n2),但是在一般情況下,它要比氣泡排序快一倍,比選擇排序還要快一點。總的來說插入和選擇都是降低了資料交換的次數。

三種排序演算法(氣泡排序,選擇排序,插入排序)

1.氣泡排序 流程 在乙個陣列中,第1個數與第2個數比,第2個數與第3個數比,第3數與第4個數比,若前面比後面大,則將兩個位置的數互換。因此,每次會將最大值推向最右邊,即座標索引為n 1處。當n 1處的元素敲定後,則繼續從0位置處推,推至n 2處,如此反覆。n n 1 n 2.時間複雜度為o n2 ...

氣泡排序,插入排序,基數排序(三種)

c 實現氣泡排序 include using namespace std void print int pdata,int count cout endl void bubblesort int pdata,int count c 實現插入排序 void insertionsort int a,in...

冒泡 選擇 插入三種排序

工作閒下來了,偶來學習下排序演算法的思想,適當的緩解下壓力,換個思考方式也很不錯的。氣泡排序 是一種簡單的排序演算法。它重複地走訪過要排序的數列,一次比較兩個元素,如果他們的順序錯誤就把他們交換過來。走訪數列的工作是重複地進行直到沒有再需要交換,也就是說該數列已經排序完成。這個演算法的名字由來是因為...