常用排序演算法實現

2021-06-19 17:29:29 字數 1700 閱讀 5316

按平均時間將排序分為四類:

(1)平方階(o(n2))排序

一般稱為簡單排序,例如直接插入、直接選擇和氣泡排序;

(2)線性對數階(o(nlgn))排序

如快速、堆和歸併排序;

(3)o(n1+£)階排序

£是介於0和1之間的常數,即0<£<1,如希爾排序;

(4)線性階(o(n))排序

如桶、箱和基數排序。

各種排序方法比較

簡單排序中直接插入最好,快速排序最快,當檔案為正序時,直接插入和冒泡均最佳。

影響排序效果的因素

因為不同的排序方法適應不同的應用環境和要求,所以選擇合適的排序方法應綜合考慮下列因素:

①待排序的記錄數目n;

②記錄的大小(規模);

③關鍵字的結構及其初始狀態;

④對穩定性的要求;

⑤語言工具的條件;

⑥儲存結構;

⑦時間和輔助空間複雜度等。

#include #includeusing namespace std;

//交換

void swap(int& a, int& b)

//不用中間數的交換 ^按位異或 不相同才為真

void swap_(int& a, int& b)

}//選擇排序

void select_sort(int *array, int left, int right)}}

}//氣泡排序

void bubble_sort(int *array, int left, int right)

}if (!flag) return;

}}//插入排序

void insert_sort(int *array, int left, int right)

array[j] = temp;}}

}//希爾排序

void shell_sort(int* array, int left, int right)

array[j + gap] = temp;}}

}}int adjust_array(int* array, int left, int right)

j--;

}while(j > i)

i++;}}

return pos;

}//快速排序

void quick_sort(int* array, int left, int right)

int get_left(int pos)

int get_right(int pos)

int get_parent(int pos)

void adjust_heap(int* array, int i, int n)

if (right < n && array[right] > array[large])

if (large != i)

}void build_heap(int* array, int n)

}//堆排序

void heap_sort(int* array, int n)

}void merge_array(int* array, int left, int mid, int right)

while(i <= m)

while(j <= n)

for (int i=0; i>n;

switch (n)

cout<<"sort latter:"<

常用排序演算法實現

常用排序演算法 目錄 常用排序演算法 1 1.插入排序 1 2.希爾排序 2 3.氣泡排序 3 4.快速排序 4 5.選擇排序 5 6.歸併排序 6 1.插入排序 public class insertsort a j 1 temp 插入 public static void main string...

常用排序演算法實現

include main.h include include using namespace std void merge int a,int l,int m,int r void printnum int arr,int len,string flag void swap int a,int b ...

常用排序演算法 C實現

1.1 氣泡排序 演算法描述 所給的n個數中,先拿第乙個數來和第二個比較,然後讓較大的乙個排在後面 即如果n1 n2,則讓n1與n2交換位置 然後又拿第二個數來和第三個數比較,又把較大的乙個排在後面,如此往下做下去,直到第n 1個數和第n個數比較完後,最大的那個數就會被公升到了最後面來.接下來又照同...