直接插入
void InsertSort(int List [],int len){
for (int i=1 ;i<len;++i){
if (List [i-1 ]>List [i]){
int temp=List [i];
int j=i;
for (;j>0 &&List [j-1 ]>temp;--j){List [j]=List [j-1 ];}
List [j]=temp;
}
}
}
折半插入
void InsertSort2(int List [],int len){
for (int i=1 ;i<len;++i){
if (List [i-1 ]>List [i]){
int temp=List [i];
int low=0 ,high=i-1 ,mid=0 ;
while (low<high){
mid=(low+high)/2 ;
if (List [mid]>temp) high=mid-1 ;
else low=mid+1 ;
}
for (int j=i-1 ;j>=low;--j){List [j+1 ]=List [j];}
List [low]=temp;
}
}
}
希尔排序
void shellsort1(int a[], int n)
{
int i, j, gap;
for (gap = n / 2 ; gap > 0 ; gap /= 2 )
for (i = 0 ; i < gap; i++){
for (j = i + gap; j < n; j += gap)
if (a[j] < a[j - gap]){
int temp = a[j];
int k = j - gap;
while (k >= 0 && a[k] > temp){
a[k + gap] = a[k];
k -= gap;
}
a[k + gap] = temp;
}
}
}
void shellsort2(int a[], int n)
{
int j, gap;
for (gap = n / 2 ; gap > 0 ; gap /= 2 )
for (j = gap; j < n; j++)
if (a[j] < a[j - gap])
{
int temp = a[j];
int k = j - gap;
while (k >= 0 && a[k] > temp)
{
a[k + gap] = a[k];
k -= gap;
}
a[k + gap] = temp;
}
}
void ShellSort3(int List[],int len){
for (int gap=len/2 ;gap>0 ;gap/=2 )
for (int i=gap;i<len;i++)
for (int j = i - gap; j >= 0 && List[j] > List[j + gap]; j -= gap)
swap(List[j],List[j+gap]);
}
冒泡排序
//冒泡排序
void BubbleSort(int List[],int len){
int flag;
for (int times =0 ;times <len;times ++){
flag=0 ;
for (int i=1 ;i<len-times ;i++){
if (List[i-1 ]>List[i]) {
swap(List[i],List[i-1 ]);flag=1 ;
}
}
if (flag==0 ) break ;
}
}
快速排序
int Partition(int List [],int low,int high){
int pivotkey=List [low];
while (low!=high){
while (low<high&&List [high]>=pivotkey) --high;
List [low]=List [high];
while (low<high&&List [low]<=pivotkey) ++low;
List [high]=List [low];
}
List [low]=pivotkey;
return low;
}
void QuickSort(int List [],int low,int high){
if (low<high){
int pivot=Partition(List ,low,high);
QuickSort(List ,low,pivot-1 );
QuickSort(List ,pivot+1 ,high);
}
}
简单选择排序
void SelectSort(int List[],int len ){
for (int k=0 ;k<len -1 ;k++){
int j=k;
for (int i=k+1 ;i<len ;i++){
if (List[i]<List[k]) j=i;
}
if (j!=k) swap(List[k],List[j]);
}
}
堆排序
void AdjustHeap(int List[],int i,int len ){
int temp=List[i];
int j=2 *i+1 ;
while(j<len ){
if (j+1 <len &&List[j+1 ]>List[j]) j++;
if (List[j]<=temp) break ;
List[i]=List[j];
i=j;
j=2 *i+1 ;
}
List[i]=temp;
}
void MakeMaxHeap(int List[],int len ){
for (int i=len /2 -1 ;i>=0 ;i--){
AdjustHeap(List,i,len );
}
}
void HeapSort(int List[],int len ){
for (int i=len /2 -1 ;i>=0 ;i--){
AdjustHeap(List,i,len );
}
for (int j=len -1 ;j>0 ;j--){
swap(List[0 ],List[j]);
AdjustHeap(List,0 ,j);
}
}
归并算法
//归并算法
void mergearray(int a [], int first , int mid , int last , int temp[]){
int i = first , j = mid + 1 ;
int m = mid , n = last ;
int k = 0 ;
while (i <= m && j <= n){
if (a [i] <= a [j])
temp[k++] = a [i++];
else
temp[k++] = a [j++];
}
while (i <= m) temp[k++] = a [i++];
while (j <= n) temp[k++] = a [j++];
for (i = 0 ; i < k; i++) a [first + i] = temp[i];
}
void mergesort(int a [], int first , int last , int temp[]){
if (first < last ){
int mid = (first + last ) / 2 ;
mergesort(a , first , mid , temp);
mergesort(a , mid + 1 , last , temp);
mergearray(a , first , mid , last , temp);
}
}
bool MergeSort(int a [], int n){
int *p = new int[n];
if (p == NULL )
return false ;
mergesort(a , 0 , n - 1 , p);
delete [] p;
return true ;
}
文档版和cpp版下载