1.希尔排序
希尔排序的下界和采取的序列有关系
typedef int ElementType;
void shellsort(ElementType array[],int N)
{
int i,j,Increment;
ElementType tmp;
for(Increment=N/2;Increment>0;Increment/=2)
for(i=Increment;i<N;i++)
{
tmp=array[i];
for(j=i;j>=Increment;j-=Increment)
if(tmp<array[j-Increment])
array[j]=array[j-Increment];
else
break;
array[j]=tmp;
}
}
2.堆排序
typedef int ElementType;
#define LeftChild(i) (2*(i)+1)
void perDown(ElementType A[],int i,int N)
{
int child;
ElementType tmp;
for(tmp=A[i];LeftChild(i)<N;i=child)
{
child=LeftChild(i);
if(child!=N-1&&A[child+1]>A[child])
child++;
if(tmp<A[child])
A[i]=A[child];
else
break;
}
A[i]=tmp;
}
void HeadSort(ElementType A[],int N)
{
int i,tmp;
for(i=N/2;i>=0;i--)
perDown(A,i,N);
for(i=N-1;i>0;i--)
{
tmp=A[0];
A[0]=A[i];
A[i]=tmp;
perDown(A,0,i);
}
}
3.插入排序
typedef int ElementType;
void InsertSort(ElementType A[],int N)
{
int i,j, tmp;
for(i=1;i<N;i++)
{
tmp=A[i];
for( j=i;j>0&&A[j-1]>tmp;j--)
A[j]=A[j-1];
A[j]=tmp;
}
}
4.快速排序
typedef int ElementType;
void QuickSort(ElementType A[],int left,int right)
{
if(left>=right)
return ;
int tmp,i,j;
tmp=A[left];
i=left;
j=right;
while(1)
{
do{
i++;
}while(i<=right&&A[i]<tmp);
do{
j--;
}while(A[j]>tmp);
if(i>j)
break;
tmp=A[i];
A[i]=A[j];
A[j]=tmp;
}
tmp=A[left];
A[left]=A[j];
A[j]=tmp;
QuickSort(A,left,j-1);
QuickSort(A,j+1,right);
}