3插入排序
插入排序的思路簡要的描述是:將序列的元素分作有序和無序兩類,然后在保持前一類有序的前提下,通過迭代將后一類元素逐一插至前一類中的適當(dāng)位置。
插入排序有直接插入排序,折半插入排序,2-路插入排序和希爾排序。這里僅給出直接插入排序的實(shí)現(xiàn)。
算法用C++語言的實(shí)現(xiàn)如下:
void InsertSort(int*p,int n){int temp=0;for(int i=1;ip[i-1]){temp=p[i];p[i]=p[i-1];for(int j=i-2;temp>p[j]&&j>0;j--){p[j+1]=p[j];}p[j+1]=temp;}}}
4快速排序
快速排序的基本思想是,通過一趟排序?qū)⒋庞涗浄指畛瑟?dú)立的兩部分,其中一部分記錄關(guān)鍵字均比另一部分記錄的關(guān)鍵字小,則可分為對這兩部分繼續(xù)進(jìn)行排序,已達(dá)到整個(gè)序列有序。
算法用C語言的實(shí)現(xiàn)如下:
int QuickSock(int*a,int Left,int Right)//算法的核心
{int Temp=a[Left];while(Left=a[Right])
{Right--;}a[Left]=a[Right];while(Lefta[Right]=a[Left];}a[Left]=Temp; return Right;}
void Repeat(int*a,int Left,int Right)
{if(Left5選擇排序
選擇排序的基本思想是,每一趟從待排序的數(shù)據(jù)元素中選出最小(或最大)的一個(gè)元素,順序放在已排好序的數(shù)列的最后,直到全部待排序的數(shù)據(jù)元素排完。
算法用C語言的實(shí)現(xiàn)如下:
void SelectSort(int*p,int n){int j=0;int temp=0;for(int k=n;k>0;k--){
for(int i=0;iint SelectMinKey(int*q,int m){int temp =q[0];int min=0;for(int i=1;i<=m;i++)
{if(temp>q[i])temp=q[i];min=i;}}return min;}
6對比各種排序
表1
冒泡排序 插入排序 快速排序 選擇排序
穩(wěn)定性 穩(wěn)定 穩(wěn)定 穩(wěn)定 不穩(wěn)定
時(shí)間復(fù)雜度 O(n^2) O(n^2) O(n^2) O(n^2)
[參考文獻(xiàn)]
[1]嚴(yán)蔚敏,吳偉民,編著.數(shù)據(jù)結(jié)構(gòu)(C語言版).清華大學(xué)出版社,2011年5月.
[2]鄧俊輝,編著.數(shù)據(jù)結(jié)構(gòu)(C++語言版)(第二版).清華大學(xué)出版社,2011年10月.
[3]Mark Allen Weiss,著.數(shù)據(jù)結(jié)構(gòu)與算法分析——C語言描述.機(jī)械工業(yè)出版社,2011年10月.
[4]百度百科知識.