各種排序演算法

2021-04-23 00:41:56 字數 1939 閱讀 1445

#include

#include

#include

using

namespace std;

void swap(int &a,int &b)

void output(int *a,int n)

//直接插入排序  

//時間複雜度o(n^2)

void insertsort(int *a,int n)   }}

//折半插入排序  o(n^2)

//只能減少排序過程中關鍵字比較的時間,並不能減少記錄移動的時間

void binsertsort(int *a,int n)

for(j=i-1;j>=high+1;--j)

a[j+1]=a[j];

a[high+1]=t;}}

//2-路插入排序

//只能減少移動記錄的次數,不能絕對避免移動 

//時間複雜度 o(n^2) 

void p2_insertsort(int *a,int n)

else

if(a[i]>d[final])

else

for(i=0;i

delete d;           

}//表插入排序

//o(n^2) 

void slinksort(int *a,int n)

else

for (i=0; i//調整  } 

delete next;  

}//希爾排序

//時間複雜度 o(n^2) 

void shellinsert(int *a,int n,int dk)

}void shellsort(int *a, int n)

;for(int i=0;ishellinsert(a,n,dlta[i]);

}//快速排序

//平均o(nlogn) 最壞o(n^2)   

int partition(int *a,int low,int high)

a[low]=pivotkey;

return low;

}void quicksort(int *a,int low,int high)  

}//氣泡排序

//o(n^2) 

void bubble_sort(int *a,int n)} }

//簡單選擇排序

o(n^2) 

void selectsort(int *a,int n)    

}//堆排序 

//注意陣列下標 

//平均最壞時間複雜度都是o(nlogn) 

void heapadjust(int *a,int n,int s)

a[s-1]=t;

}void heapsort(int *a,int n)

}//2-路歸併排序

//平均最壞時間複雜度都是o(nlogn) 

void merge(int *a,int i,int m,int n)

}void msort(int *a,int s,int t)

}void mergesort(int *a,int n)

//非遞迴歸併

void umergesort(int *a,int n)

if (j + i < n) merge(a, j , j + i -1 , n-1 );

i+=i;}}

//自然歸併排序

//先找出陣列裡逆序的點,以該點分組

void naturalmsort(int *a,int n)

while(imerge(a,0,p,i-1);}} 

//基數排序

//o(d(n+rd)) 

void radixsort(int *a,int n,int d) //d為a內最大元素的位數 }}

int main()

排序 各種排序演算法

每次將乙個待排序的記錄,按其關鍵字大小插入到前面已經排好序的子表中適當位置,直到全部記錄插入完成為止 待排序的記錄放在陣列r 0,n 1 中 排序過程中將r分成兩個子區間,有序區r 0,i 1 無序區r i,n 1 將當前無序區的第1個記錄,插入到有序區中適當的位置上 每次是有序區增加乙個記錄,知道...

各種排序演算法

交換函式 void swap int a,int b 氣泡排序 氣泡排序 bubble sort,台灣譯為 泡沫排序或氣泡排序 是一種簡單的排序演算法。它重複地走訪過要排序的數列,一次比較兩個元素,如果他們的順序錯誤就把他們交換過來。走訪數列的工作是重複地進行直到沒有再需要交換,也就是說該數列已經排...

各種排序演算法

排序演算法是一種基本並且常用的演算法。由於實際工作中處理的數量巨大,所以排序演算法 對演算法本身的速度要求很高。而一般我們所謂的演算法的效能主要是指演算法的複雜度,一般用o方法來表示。在後面我將 給出詳細的說明。對於排序的演算法我想先做一點簡單的介紹,也是給這篇文章理乙個提綱。我將按照演算法的複雜度...