冒泡排序
void Bubble_Sort(ElementType A[],int N)
{
for(P=N-1;P>=0;P--){
flag=0;
for(i=0;i<P;i++){
if(A[i]>A[i+1]){
Swap(A[i],A[i+1]);
flag=1;
}
}
if(flag==0) break;
}
}
插入排序
void Insertion_Sort(ElementType A[],int N)
{ int P,i;
ElementType Tmp;
for(P=1;P<N;P++){
Tmp = A[P];
for(i=P;i>0&&A[i-1]>Tmp;i--)
A[i]=A[i-1];
A[i]=Tmp;
}
}
堆排序
void Swap(ElementType *a,ElementType *b)
{
ElementType t = *a; *a = *b; *b = t;
}
void PercDown(ElementType A[],int p,int N)
{
int Parent,Child;
ElementType Tmp;
X = A[p];
for(Parent=p;(Parent*2+1)<N;Parent=Child){
Child = Parent*2+1;
if((Child!=N-1)&&(A[Child]<A[Child+1]))
Child++;
if(X>=A[Child]) break;
else
A[Parent]=A[Child];
}
A[Parent]=X;
}
void HeapSort(ElementType A[],int N)
{
int i;
for(i=N/2-1;i>=0;i--)
PercDown(A,i,N);
for(i=N-1;i>0;i--){
Swap(&A[0],&A[i]);
PercDown(A,0,i);
}
}
归并排序-递归实现
void Merge(ElementType A[],ElementType TmpA[],int L,int R,int RightEnd)
{
int LeftEnd,NumElements,Tmp;
int i;
LeftEnd = R-1;
Tmp = L;
NumElements = RightEnd-L+1;
while(L<=LeftEdge&&R<=RightEdge){
if(A[L]<=A[R])
TmpA[Tmp++]=A[L++];
else
TmpA[Tmp++]=A[R++];
}
while(L<=LeftEnd)
TmpA[Tmp++]=A[L++];
while(R<=RightEnd)
TmpA[Tmp++]=A[R++];
for(i=0;i<NumElements;i++,RightEnd--)
A[RightEnd]=TmpA[RightEnd];
}
void Msort(ElementType A[],ElementType TmpA[],int L,int RightEnd)
{
int Center;
if(L<RightEnd){
Center = (L+RightEnd)/2;
Mosrt(A,TmpA,L,Center);
Mosrt(A,TmpA,Center+1,RightEnd);
Merge(A,TmpA,L,Center+1,RightEnd);
}
}
void MergeSort(ElementType A[],int N)
{
ElementType *TmpA;
TmpA = (ElementType*)malloc(N*sizeof(ElementType));
if(TmpA!=NULL){
Msort(A,TmpA,0,N-1);
free(TmpA);
}
else printf("空间不足");
}
归并排序-循环实现
void Merge_pass(ElementType A[],ElementType TmpA[],int N,int length)
{
int i,j;
for(i=0;i <= N-2*length;i += 2*length)
Merge(A,TmpA,i,i+length,i+2*length-1);
if(i+length<N)
Merge(A,TmpA,i,i+length,N-1);
else
for(j=i;j<N;j++) TmpA[j]=A[j];
}
void Merge_Sort(ElementType A[],int N)
{
int length;
ElementType *TmpA;
length=1;
TmpA = malloc(N*sizeof(ElementType));
if(TmpA!=NULL){
while(length<N){
Merge_pass(A,TmpA,N,length);
length *= 2;
Merge_pass(TmpA,A,N,length);
length *= 2;
}
free(TmpA);
}
else prinf("空间不足");
}