排序專題(桶排序,冒泡,快排,堆排序)

2021-09-25 20:45:57 字數 2452 閱讀 3611

1.最簡單的排序——桶排序(簡化版)

優點:快速,簡單

缺點:資料足夠大時,會造成嚴重的空間浪費;不能解決小數問題

理解:桶排序就是開乙個足夠大的陣列,陣列下標最大值(設為x,a[x])要大於需要排序的資料最大值。設輸入為ni,則只要令a[ni]++,就可以確定相同ni的個數,然後從從0到n,只要a[ni]不為0就可以按順序正確的輸出ni。另外由於桶排序的特殊性,桶排序還能夠解決元素重複問題。

**:

#include

#include

using namespace std;

int a[

1010];

intmain()

for(i=

1; i<=

1000

; i++

)//浪費空間

if(a[i]

)while

(a[i]--)

//不輸出重複元素的話就不需要這一行

printf

("%d "

,i);

return0;

}

2.氣泡排序

優點:能解決小數問題,穩定

缺點:時間複雜度o(n2);

理解:氣泡排序的核心就是雙重巢狀for迴圈,每次比較相鄰的兩個元素,如果他們的順序錯誤,就交換。冒泡冒泡,每一趟只能確定將乙個數交換。由於氣泡排序每次只比較相鄰兩個元素。

#include

#include

using namespace std;

int a[20]

;int

main()

for(i=

0;i)printf

("%d "

,a[i]);

return0;

}

3.快速排序

優點:極快

缺點:不穩定

理解:每次排序的時候設定乙個基準點,將小於等於基準點的數放左邊,反之放右邊。這樣交換的時候就不會想氣泡排序那樣每次只搞定相鄰的了。快排的每次排序是跳躍式的,運用了二分思想。

#include

#include

using namespace std;

int a[

1020

],n;

struct node

b[100];

void

insertsort

(node a,

int n)

//結構體從大到小快排

a[i]

.cre=tmp;

a[i]

.tim=tmp2;}}

void

quick

(int l,

int r)

a[l]

=a[i]

; a[i]

=temp;

quick

(l,i-1)

;quick

(i+1

,r);

return;}

intmain()

4.堆排序

優點:快,時間複雜度o(nlogn)

缺點:堆排序將需要做兩個步驟:建堆,排序(調整堆)。所以一般在小規模的序列中不合適,

理解:可以建立最大堆,每次將第乙個和最後乙個元素互換,然後最大元素到了最後一位歸位,再接著調整頂部元素再將堆的大小減1。

#include

#include

using namespace std;

int a[

1020

],n;

void

swap

(int i,

int j)

void

siftdown

(int i)

//下沉函式,確保堆的正確性

if(t!=i)

else flag=1;

}return;}

void

headsort()

return;}

intmain()

排序介紹(選擇 冒泡 快排 堆排序)

問題描述 排序問題 給出一組數字,要求按照數值的大小進行排序 例如 這組資料進行公升序的排列後的順序為 氣泡排序 是一種簡單的排序演算法,它實現的過程 不斷重複的走訪過要排列的數列,一次比較兩個元素,如果他們的順序錯誤就把他們交換過來,走訪數列的工作就是重複的進行,直到沒有再需要進行交換的的時候,就...

學習 排序演算法 快排 選擇 冒泡 桶排序

稍微複習 學習 了一下排序的演算法 選擇 冒泡 桶 快排等 下面的 和講解也是這幾種排序,至於歸併 基數啥的想單獨開一篇部落格 以下單獨 均涉及巨集定義,可以先看思路再到最後看巨集定義內容 本部落格針對洛谷p1177排序模板 並已通過大資料對拍 為公升序排序 快速排序 stl 好,直接sort 想降...

快排 堆排序

快速排序主要運用了二分的思想,每次選擇乙個基準元素,比基準元素打的元素都放在基準元素前面,比基準元素小的元素都放在基準元素後面,這樣不斷遞迴細分,完成排序。void quicksort int a,int l,int r if ia i a j i while ia i temp if ia j a...