常用排序模板

2021-07-27 23:28:04 字數 2496 閱讀 5389

快速排序

其思想是:先選乙個「標尺」,

用它把整個佇列過一遍篩子,

以保證:其左邊的元素都不大於它,其右邊的元素都不小於它。

這樣,排序問題就被分割為兩個子區間。

再分別對子區間排序就可以了。

選擇排序

思想:重複選擇陣列內的最大值,交換到合適的位置。該排序方法比較慢。

堆排序

思想:堆實際上是一棵完全二叉樹,利用大頂堆(小頂堆)堆頂記錄的是最大關鍵字(最小關鍵字)這一特性,使得每次從無序中選擇最大記錄(最小記錄)。堆排序其實也是一種選擇排序,是一種樹形選擇排序。

歸併排序

思想:這是乙個採用分治法的演算法,先使每個子串行有序,再使子串行段間有序,再將已有序的子串行合併,這樣就能得到完全有序的序列。

桶排序

構建乙個雜湊函式hash(ai)用以均勻的將n個元素分配到n個桶中。

**一起上

#include 

#include

#include

#include

#include

#include

#define maxsize 120

#define false 0

#define true 1

using

namespace

std;

typedef

struct

sqlist;

typedef

int redtype;

int comparecount;

//隨意資料的生成

void sortinit(sqlist *l)

while (j < i);

l->r[i] = temp;

}l->length = maxsize;

}//資料拷貝

void datacopy(sqlist l, sqlist &l1)

//直接插入排序

void insertsort(sqlist &l)

l.r[j + 1] = l.r[0];}}

}//希爾排序

void shellinsert(sqlist &l, int dk)

}return;

}void shellsort(sqlist &l )

return;

}//氣泡排序

void bubblesort(sqlist &l)

}m--;

}}//快排

int partition(sqlist &l, int low, int high)

l.r[low] = l.r[high];

while(low < high&&l.r[low]<= pivot)

l.r[low]= l.r[0];

return low;

}}void quicksort(sqlist &l, int low, int high)

return;

}void qsort(sqlist &l)

//直接選擇排序

void selectsort(sqlist &l) //直接選擇排序

}}//堆排序

void heapadjust(sqlist &l, int s, int m)// 演算法10.10

if(rc>l.r[j])

break; // rc應插入在位置s上

l.r[s]=l.r[j];

s=j;

}l.r[s]=rc; // 插入

}void heapsort(sqlist &l)

for(i=l.length;i>1;--i)

}//歸併排序

void merge(redtype sr,redtype tr,int i,int m,int n)

else

}if(i<=m)

for(l=0;l<=m-i;l++)

if(j<=n)

for(l=0;l<=n-j;l++)

}void msort(redtype sr,redtype tr1,int s, int t)

}void mergesort(sqlist &l)

//輸出排序結果

void outputsortdata(sqlist l)

getchar();

cout

void sort(sqlist l, sqlist &l1, int a[20][2], int no)

int main()

; sqlist l, l1, l2, l3;

sortinit(&l);

printf("(一)排序的結果為:\n");

sort(l, l1, a, 0);

printf("(二)各排序的比較次數為:\n");

for (int i = 1; i <= 7; i++)

system("pause");

return

0;}

C 常用排序模板

區分的主要依據就是演算法是否是基於比較的 leetcode排序 演算法視覺化 圖是leetcode題解上的 這裡不打算具體的說計數排序和桶排序,因為思路較為簡單 均在leetcode上測試過,可以放心的使用 class solution swap nums minn nums i return nu...

排序 快速排序 歸併排序模板 模板

正經人誰手寫這玩意?785.快速排序 本質 分治。是不穩定的排序演算法。時間複雜度 o n logn o nlogn o nlog n 空間複雜度 o l ogn o logn o logn 基於遞迴,用到棧空間 模板注意點 關於無限遞迴問題,大家動手模擬一遍樣例就能理解了。快排邊界問題很多,很煩 ...

排序 希爾排序模板

希爾排序又稱縮小增量排序 1 先取定乙個小於n的整數gap1作為第乙個增量,把整個序列分成gap1組。所有距離為gap1的倍數的元素放在同一組中,在各組內分別進行排序 分組內採用直接插入排序或其它基本方式的排序 一般gap1為n 2,一次往後類推 gap2 gap 2,若為奇數,則gap2 gap1...