欢迎来到天天文库
浏览记录
ID:34725222
大小:61.18 KB
页数:3页
时间:2019-03-10
《pascal语言多种排序算法源程序》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、PASCAL语言多种排序算法源程序1.快速排序:procedureqsort(l,r:integer);vari,j,mid:integer;begini:=l;j:=r;mid:=a[(l+r)div2];{将当前序列在中间位置的数定义为中间数}repeatwhilea[i]middodec(j);{在右半部分寻找比中间数小的数}ifi<=jthenbegin{若找到一组与排序目标不一致的数对则交换它们}swap(a[i],a[j]);inc(i);dec(j);{继续找}end;untili>j;i
2、fl3、ort;vari,j,k:integer;beginfori:=1ton-1doforj:=i+1tondoifa[i]>a[j]thenswap(a[i],a[j]);end;4.冒泡排序procedurebubble_sort;vari,j,k:integer;beginfori:=1ton-1doforj:=ndowntoi+1doifa[j]4、na[0]:=a[i];k:=2*i;{在完全二叉树中结点i的左孩子为2*i,右孩子为2*i+1}whilek<=mdobeginif(k5、wap(a[1],a[j]);sift(1,j-1);end;end;6.归并排序{a为序列表,tmp为辅助数组}proceduremerge(vara:listtype;p,q,r:integer);{将已排序好的子序列a[p..q]与a[q+1..r]合并为有序的tmp[p..r]}varI,j,t:integer;tmp:listtype;begint:=p;i:=p;j:=q+1;{t为tmp指针,I,j分别为左右子序列的指针}while(t<=r)dobeginif(i<=q){左序列有剩余}and((j>r)or(a[i]<=a[j])){满足取左边序列当前元素的要求6、}thenbegintmp[t]:=a[i];inc(i);endelsebegintmp[t]:=a[j];inc(j);end;inc(t);end;fori:=ptordoa[i]:=tmp[i];end;{merge}proceduremerge_sort(vara:listtype;p,r:integer);{合并排序a[p..r]}varq:integer;beginifp<>rthenbeginq:=(p+r-1)div2;merge_sort(a,p,q);merge_sort(a,q+1,r);merge(a,p,q,r);end;end;{main}begin7、merge_sort(a,1,n);end.
3、ort;vari,j,k:integer;beginfori:=1ton-1doforj:=i+1tondoifa[i]>a[j]thenswap(a[i],a[j]);end;4.冒泡排序procedurebubble_sort;vari,j,k:integer;beginfori:=1ton-1doforj:=ndowntoi+1doifa[j]4、na[0]:=a[i];k:=2*i;{在完全二叉树中结点i的左孩子为2*i,右孩子为2*i+1}whilek<=mdobeginif(k5、wap(a[1],a[j]);sift(1,j-1);end;end;6.归并排序{a为序列表,tmp为辅助数组}proceduremerge(vara:listtype;p,q,r:integer);{将已排序好的子序列a[p..q]与a[q+1..r]合并为有序的tmp[p..r]}varI,j,t:integer;tmp:listtype;begint:=p;i:=p;j:=q+1;{t为tmp指针,I,j分别为左右子序列的指针}while(t<=r)dobeginif(i<=q){左序列有剩余}and((j>r)or(a[i]<=a[j])){满足取左边序列当前元素的要求6、}thenbegintmp[t]:=a[i];inc(i);endelsebegintmp[t]:=a[j];inc(j);end;inc(t);end;fori:=ptordoa[i]:=tmp[i];end;{merge}proceduremerge_sort(vara:listtype;p,r:integer);{合并排序a[p..r]}varq:integer;beginifp<>rthenbeginq:=(p+r-1)div2;merge_sort(a,p,q);merge_sort(a,q+1,r);merge(a,p,q,r);end;end;{main}begin7、merge_sort(a,1,n);end.
4、na[0]:=a[i];k:=2*i;{在完全二叉树中结点i的左孩子为2*i,右孩子为2*i+1}whilek<=mdobeginif(k5、wap(a[1],a[j]);sift(1,j-1);end;end;6.归并排序{a为序列表,tmp为辅助数组}proceduremerge(vara:listtype;p,q,r:integer);{将已排序好的子序列a[p..q]与a[q+1..r]合并为有序的tmp[p..r]}varI,j,t:integer;tmp:listtype;begint:=p;i:=p;j:=q+1;{t为tmp指针,I,j分别为左右子序列的指针}while(t<=r)dobeginif(i<=q){左序列有剩余}and((j>r)or(a[i]<=a[j])){满足取左边序列当前元素的要求6、}thenbegintmp[t]:=a[i];inc(i);endelsebegintmp[t]:=a[j];inc(j);end;inc(t);end;fori:=ptordoa[i]:=tmp[i];end;{merge}proceduremerge_sort(vara:listtype;p,r:integer);{合并排序a[p..r]}varq:integer;beginifp<>rthenbeginq:=(p+r-1)div2;merge_sort(a,p,q);merge_sort(a,q+1,r);merge(a,p,q,r);end;end;{main}begin7、merge_sort(a,1,n);end.
5、wap(a[1],a[j]);sift(1,j-1);end;end;6.归并排序{a为序列表,tmp为辅助数组}proceduremerge(vara:listtype;p,q,r:integer);{将已排序好的子序列a[p..q]与a[q+1..r]合并为有序的tmp[p..r]}varI,j,t:integer;tmp:listtype;begint:=p;i:=p;j:=q+1;{t为tmp指针,I,j分别为左右子序列的指针}while(t<=r)dobeginif(i<=q){左序列有剩余}and((j>r)or(a[i]<=a[j])){满足取左边序列当前元素的要求
6、}thenbegintmp[t]:=a[i];inc(i);endelsebegintmp[t]:=a[j];inc(j);end;inc(t);end;fori:=ptordoa[i]:=tmp[i];end;{merge}proceduremerge_sort(vara:listtype;p,r:integer);{合并排序a[p..r]}varq:integer;beginifp<>rthenbeginq:=(p+r-1)div2;merge_sort(a,p,q);merge_sort(a,q+1,r);merge(a,p,q,r);end;end;{main}begin
7、merge_sort(a,1,n);end.
此文档下载收益归作者所有