十大排序演算法

2022-02-04 04:06:01 字數 3899 閱讀 1453

1.1 演算法描述

初始狀態:無序區為r[1..n],有序區為空;

每一輪從無序區起點開始,相鄰元素兩兩比較,如果前面的比後面的元素大就交換,直到無序區最後。

針對所有的元素重複以上的步驟,每一輪冒泡操作無序區域元素減一,有序區元素減一;

重複執行n-1輪,序列變為有序。

1.2 **演示

1.3 **實現

#include const int maxn=1e4+5,inf=2147483647;

int a[maxn];

int n;

void read()

void print()

void bubble_sort(int a)

}void solve()

int main()

2.1 演算法描述

2.2 **演示

2.3 **實現

#include const int maxn=1e4+5,inf=2147483647;

int a[maxn];

int n;

void read()

void print()

void select_sort(int a)

}void solve()

int main()

3.1 演算法描述

從第乙個元素開始,該元素可以認為已經被排序;

取出下乙個元素,在已經排序的元素序列中從後向前掃瞄;

如果該元素(已排序)大於新元素,將該元素移到下一位置;

重複步驟3,直到找到已排序的元素小於或者等於新元素的位置;

將新元素插入到該位置後;

重複步驟2~5

3.2 **演示

3.3 **實現

#include const int maxn=1e4+5,inf=2147483647;

int a[maxn];

int n;

void read()

void print()

void insert_sort(int a)

}void solve()

int main()

4.1 演算法描述

選擇乙個較大的增量,一般選gap=n/2,把下標為i,i+gap,i+2*gap+...+i+n/gap*gap分為一組,對同組的元素進行插入排序。

減小增量為上乙個增量的一半,繼續操作1

重複以上操作,直到增量為1,此時序列變為有序。

4.2 **演示

4.3 **演示

#include const int maxn=1e4+5,inf=2147483647;

int a[maxn];

int n;

void read()

void print()

void shell_sort()

void print()

void merge(int l,int mid,int r);//b儲存合併的序列

while(i<=mid && j<=r)//跳出迴圈兩個序列中有乙個為空

while(i<=mid)//若比較完之後,第乙個有序區仍有剩餘

b[++k]=a[i++];

while(j<=r)//若比較完之後,第二個有序區仍有剩餘

b[++k]=a[j++];

for(i=l,k=1;i<=r;++i,++k)//把合併後的排好序的序列拷貝到陣列a[l,r]

a[i]=b[k];

}void merge_sort(int l,int r)

void print()

void quick_sort(int l,int r)//交換函式

int heap[maxn],siz=0;

void push(int x)

void pop()

void print()

void counting_sort()

int cnt=0;

for(int i=min;i<=max;++i)

while(b[i])a[++cnt]=i,b[i]--;

}void solve()

int main()

9.1 演算法描述

設定乙個定量的陣列當作空桶子。

尋訪序列,並且把專案乙個乙個放到對應的桶子去。

對每個不是空的桶子進行排序。

從不是空的桶子裡把專案再放回原來的序列中。

9.2 **演示

9.3 時間效率10.1 演算法描述

取得陣列中的最大數,並取得位數;

arr為原始陣列,從最低位開始取每個位組成radix陣列;

radix進行計數排序(利用計數排序適用於小範圍數的特點);

10.2 **演示

**實現

#include const int maxn=1e4+5,inf=2147483647;

int a[maxn];

int n;

void read()

void print()

int get_max(int a,int n)

/* * 引數說明:

* a -- 陣列

* n -- 陣列長度

* exp -- 指數。對陣列a按照該指數進行排序。

* * 例如,對於陣列a=;

* (01) 當exp=1表示按照"個位"對陣列a進行排序

* (02) 當exp=10表示按照"十位"對陣列a進行排序

* (03) 當exp=100表示按照"百位"對陣列a進行排序

* ...

*/void count_sort(int a,int n,int exp);

// b儲存"被排序資料"的臨時陣列

for(int i=1;i<=n;++i)// 將資料出現的次數儲存在buckets中

buckets[(a[i]/exp)%10]++;

for(int i=1;i<10;++i)// 更改buckets[i]。目的是讓更改後的buckets[i]的值,是該資料在b中的位置。

buckets[i]+=buckets[i-1];

for(int i=n;i>0;--i)

for(int i=0;i<=n;++i)// 將排序好的資料賦值給a

a[i]=b[i];

}void radix_sort(int a,int n)

void solve()

int main()

十大排序演算法

1.非線性時間類排序 時間複雜度未突破 0 nlog 2n 不穩定的四個排序演算法 選擇排序 0 n2 希爾排序 0 n1.3 希爾排序實現python 快速排序 0 n log2 n 0 nlog 2n 0 nlog 2 n 快速排序實現c python 堆排序 0 n log2 n 0 nlog...

十大排序演算法

排序規則 從左至右依次增大 一 基於比較的排序演算法 插入排序 逐個遍歷未排序序列,將其在已排序序列中從右到左比較,直到遇到比自己小的數,然後將元素插入到那個數的後面,有序序列從左向右生長。選擇排序 在未排序序列中選擇最小的元素,將其插入到已排序序列的末尾,有序序列從左向右生長。氣泡排序 從左至右逐...

十大排序演算法

github 排序演算法是 資料結構與演算法 中最基本的演算法之一。排序演算法可以分為內部排序和外部排序,內部排序是資料記錄在記憶體中進行排序,而外部排序是因排序的資料很大,一次不能容納全部的排序記錄,在排序過程中需要訪問外存。常見的內部排序演算法有 插入排序 希爾排序 選擇排序 氣泡排序 歸併排序...