插入排序
void Insert_Sort(int a[],int n)
{
int i,j;
for(i=1;i<n;i++)
{
int temp=a[i];
j=i-1;
while(j>=0&&a[j]>temp)
{
a[j+1]=a[j];
j--;
}
a[j+1]=temp;
}
}
折半插入排序
void BInsert_Sort(int *a,int n)
{
int i,j,low,high,mid,key;
for(i=1;i<n;i++)
{
key=a[i];
low=0;
high=i-1;
while(low<=high){
mid=(low+high)/2;
if(a[mid]>key)
high=mid-1;
else
low=mid+1;
}
for(j=i-1;j>=high+1;j--)
a[j+1]=a[j];
a[high+1]=key;
}
}
希尔排序
void Shell_Sort(int *a,int n)
{
int i,j,front,gap,temp;
for(gap=n/2;gap>=1;gap=gap/2)
for(i=0;i<gap;i++)
for(j=i+gap;j<n;j=j+gap)
{
front=j-gap;
temp=a[j];
while(front>=0&&a[front]>temp)
{
a[front+gap]=a[front];
front=front-gap;
}
a[front+gap]=temp;
}
}
冒泡排序
void Bubble_Sort(int *a,int n)
{
int i,temp;
for(i=0;i<n-1;i++)
{
int j;
int flag=0;
for(j=0;j<n-1-i;j++)
{
if(a[j]>a[j+1])
{
temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
flag=1;
}
}
if(flag==0)
{
return;
}
}
}
快速排序
void Quick_Sort(int *a,int low,int high)
{
if(low<high)
{
int i=low;
int j=high;
int key=a[i];
while(i<j)
{
while(i<j&&a[i]<=key)
{
i++;
}
while(i<j&&a[j]>=key)
{
j--;
}
if(i<j)
{
int temp=a[i];
a[i]=a[j];
a[j]=temp;
}
}
int temp=a[j];
a[j]=a[low];
a[low]=temp;
Quick_Sort(a,low,j-1);
Quick_Sort(a,j+1,high);
}
}
选择排序
void Select_Sort(int *a,int n)
{
int i,j,min,temp;
for(i=0;i<n-1;i++)
{
min=i;
for(j=i+1;j<n;j++)
if(a[j]<a[min])min=j;
if(min!=i)
{
temp=a[i];
a[i]=a[min];
a[min]=temp;
}
}
}
堆排序
void HeadAdjust(int *a,int k,int n)
{
int key=a[k];
int i;
for(i=2*k;i<n;i=i*2)
{
if(i<n&&a[i]<a[i+1])
i++;
if(key>=a[i])break;
else
{
a[k]=a[i];
k=i;
}
}
a[k]=key;
}
void BuildMaxHeap(int *a,int n)
{
for(int i=n/2;i>=0;i--)
HeadAdjust(a,i,n);
}
void HeapSort(int *a,int n)
{
BuildMaxHeap(a,n);
for(int i=n-1;i>0;i--)
{
int temp=a[i];
a[i]=a[0];
a[0]=temp;
HeadAdjust(a,0,i-1);
}
}
合并排序
#include <stdlib.h>
void Merge(int *a,int low,int mid,int high)
{
int *b=(int *)malloc(n*sizeof(int));
int i,j,k;
for(i=low;i<=high;i++)
b[i]=a[i];
for(i=low,j=mid+1,k=low;i<=mid&&j<=high;k++)
{
if(b[i]<=b[j])
a[k]=b[i++];
else
a[k]=b[j++];
}
while(i<=mid)a[k++]=b[i++];
while(j<=high)a[k++]=b[j++];
}
void Merge_Sort(int *a,int low,int high)
{
if(low<high){
int mid=(low+high)/2;
Merge_Sort(a,low,mid);
Merge_Sort(a,mid+1,high);
Merge(a,low,mid,high);
}
}