常用排序演算法

2021-06-16 08:40:40 字數 2889 閱讀 7472

排序演算法                最好時間        平均時間        最壞時間        輔助空間    穩定性

直接插入排序           o(n)             o(n^2)        o(n^2)         o(1)         穩定

希爾排序                                    o(n^1.3)                         o(1)         不穩定

直接選擇排序           o(n^2)         o(n^2)        o(n^2)         o(1)         不穩定

堆排序                   o(n x lbn)      o(n x lbn)    o(n x lbn)    o(1)          不穩定

氣泡排序                o(n)              o(n^2)        o(n^2)         o(1)         穩定

快速排序                o(n x lbn)      o(n x lbn)    o(n x lbn)     o(lbn)       不穩定

歸併排序                o(n x lbn)      o(n x lbn)     o(n x lbn)     o(n)        不穩定

基數排序(基於鏈式佇列) o(mxn)     o(mxn)        o(mxn)          o(n)        穩定

基數排序(基於順序佇列) o(mxn)     o(mxn)        o(mxn)          o(mxn)    穩定

#include

void printdata(int data,int len)

printf("\n");

}//1.選擇排序

//2.插入排序

//3.氣泡排序

//4.快速排序

//5.歸併排序

//6.堆排序

//7.希爾排序

//1.選擇排序

void sort1(int data,int len)

}if(data[i] < n)}}

//2.插入排序

void sort2(int data,int len)

data[j] = n;}}

}}//3.氣泡排序

void sort3(int data,int len)}}

}void sortpart(int data,int start,int end)

int k = start;

int fi = start + 1;

int ti = end;

while(fi < ti)

while(data[ti] > data[start])

if(fi < ti)

}if(data[start] > data[ti])

sortpart(data, start, k - 1);

sortpart(data, k + 1, end);

}//4.快速排序

void sort4(int data,int len)

void sort5part(int *data,int *datatemp,int start,int end)

int mid = (start + end) / 2;

if(mid > start && mid < end)

printf("s=%d m=%d e=%d  ",start,mid,end);

int i = start,total = end;

int fi = start,si = mid + 1;

while(i <= total)

else

i++;

}else if(fi > mid && si <= end)

break;

}else if(fi <= mid && si > end)

break;}}

memcpy(data+start,datatemp+start,(end-start+1)*(sizeof(int)));

printdata(data,10);

}//5.歸併排序

void sort5(int data,int len)

void sortheap(int data,int id,int len)

int right = left + 1;

int mid,k;

if(right < len)//有左右子節點

else

}else//只有左節點

if(data[id] < mid)

}//6.堆排序

void sort6(int data,int len)

//生成大根堆

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

//每次都把頂部最大的乙個放到尾部,剩餘部分重新生成大根堆

for(i = len - 1; i > 0; i--)

}//7.希爾排序

void sort7(int data,int len)

}k = k / 2;}}

void test(int* data,int *src,int len)

int main(int argc, char* argv)

;int len = sizeof(data)/4;

printdata(data,len);

sort6(data,len);

printf("\nresult=\n");

printdata(data,len);

printf("\nhello world!\n");

return 0;

}

常用排序演算法

筆者最近學習演算法,學了很久也只弄懂了幾個排序演算法,在這裡曬一下下,作為以後參考之用。一 為什麼要研究排序問題 許多計算機科學家認為,排序演算法是演算法學習中最基本的問題,原因有以下幾點 l有時候應用程式本身需要對資訊進行排序,如為了準備客戶賬目,銀行需要對支票賬號進行排序 l很多演算法將排序作為...

常用排序演算法

一 簡單排序演算法 由於程式比較簡單,所以沒有加什麼注釋。所有的程式都給出了完整的執行 並在我的vc環境 下執行通過。因為沒有涉及mfc和windows的內容,所以在borland c 的平台上應該也不會有什麼 問題的。在 的後面給出了執行過程示意,希望對理解有幫助。1.冒泡法 這是最原始,也是眾所...

常用排序演算法

每次從尚未排好的陣列範圍裡選出乙個最小的放到正確的位置。void selection sort int array,int size swap array,lhs,min 從陣列裡選出乙個基準元素,通過交換位置讓它前面的元素都比它小 後面的元素都比它大,最後分而治之。void quicksort i...