数据结构实验(C语言):折半插入排序、快速排序
2026/7/28 18:56:27 网站建设 项目流程

文章参考过网上的内容,如有侵权,请联系

#include<stdio.h>#include<stdlib.h>typedefstruct{int*data;//线性链表的初值intlength;}Sqlist;intPartition2(Sqlist&L,intlow,inthigh){//交换顺序表L中子表r[low..high]的记录,枢纽记录到位,并返回其所在位置//在它之前(后)的记录均不大(小)于它L.data[0]=L.data[low];//用子表第一个记录作枢纽记录intkey=L.data[low];//枢纽记录关键字while(low<high){while(low<high&&L.data[high]>=key)--high;//从右向左搜索L.data[low]=L.data[high];//移动比枢纽记录值小的记录while(low<high&&L.data[low]<=key)++low;//从左往右搜索L.data[high]=L.data[low];//将比枢纽记录大的记录移到高端}L.data[low]=L.data[0];returnlow;}voidQsort(Sqlist&L,intlow,inthigh){//对顺序表L中的子序列L.r[low..high]作快速排序if(low<high){//长度大于一intpivotloc=Partition2(L,low,high);//将子序列一分为二Qsort(L,low,pivotloc-1);//对低子表递归排序Qsort(L,pivotloc+1,high);//对高子表递归排序}}voidBInserSort(Sqlist&L){//对顺序表L作折半插入排序inti;for(i=2;i<=L.length;++i){L.data[0]=L.data[i];//将L.r[i]暂存到L.r[0]intlow=1;inthigh=i-1;while(low<=high){//在序列中折半查找插入位置intm=(low+high)/2;if(L.data[0]<L.data[m])high=m-1;//插入点在低半区elselow=m+1;//插入点在高半区}for(intj=i-1;j>=high+1;--j)L.data[j+1]=L.data[j];//记录后移L.data[high+1]=L.data[0];//插入}}intmain(){inta[8]={0,1,6,4,10,5,3,2};Sqlist L;L.length=7;L.data=a;for(inti=1;i<=L.length;i++)printf("%d ",L.data[i]);printf("\n");printf("-----------进行快速排序--------\n");Qsort(L,1,7);for(inti=1;i<=L.length;i++)printf("%d ",L.data[i]);printf("\n");printf("-------进行折半插入排序---------\n");BInserSort(L);for(inti=1;i<=L.length;i++)printf("%d ",L.data[i]);}

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询