#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方法來表示。在後面我將 給出詳細的說明。對於排序的演算法我想先做一點簡單的介紹,也是給這篇文章理乙個提綱。我將按照演算法的複雜度...