排序算法

1.快速排序
int Partition ( SqList L,int low, int high ){
L.elem[0]=L.elem[low];
int l=low,r=high;
while(l<r){
while(r>l&&L.elem[r]>=L.elem[0]) r--;
L.elem[l]=L.elem[r];
while(l<r&&L.elem[l]<=L.elem[0]) l++;
L.elem[r]=L.elem[l];
}
L.elem[l]=L.elem[0];
return l;
}
2.堆排序
void HeapAdjust( HeapType H, int s, int m){
int now=s;
if(s2<=m&&H.elem[s2]>H.elem[now]){
now<<=1;
}
if(s2+1<=m&&H.elem[s2+1]>H.elem[now]){
now=s*2+1;
}
if(now!=s){
int t=H.elem[s];
H.elem[s]=H.elem[now];
H.elem[now]=t;
HeapAdjust(H,now,m);
}
}
3.归并排序
void Merge(SqList L,int low,int m,int high){
int a[1010],p=0,l=low,r=m+1;
while(l<=m&&r<=high){
if(L.elem[l]<L.elem[r]){
a[p++]=L.elem[l++];
}else{
a[p++]=L.elem[r++];
}
}
while(l<=m){
a[p++]=L.elem[l++];
}
while(r<=high){
a[p++]=L.elem[r++];
}
for(int i=0;i<p;i++){
L.elem[low+i]=a[i];
}
}
4.直接插入排序
void InsertSort(SqList L){
for(int i=2;i<=L.Length;i++){
int p=i;
L.elem[0]=L.elem[p--];
while(p>0&&L.elem[p]>L.elem[0]){
L.elem[p+1]=L.elem[p];
p--;
}
L.elem[p+1]=L.elem[0];
}
}
5.希尔排序
void ShellInsert(SqList L,int dk){
for(int i=dk+1;i<=L.Length;i++){
int p=i;
L.elem[0]=L.elem[p];
p-=dk;
while(p>0&&L.elem[p]>L.elem[0]){
L.elem[p+dk]=L.elem[p];
p-=dk;
}
L.elem[p+dk]=L.elem[0];
}
}

posted @ 2024-12-20 15:08  茆伟昊  阅读(12)  评论(0)    收藏  举报