排序算法

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 @   茆伟昊  阅读(5)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架
点击右上角即可分享
微信分享提示