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...