按平均時間將排序分為四類:
(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個數比較完後,最大的那個數就會被公升到了最後面來.接下來又照同...