RooseveltLuo 2021-06-17 10:54 采纳率: 25%
浏览 19
已采纳

分块查找这几段代码应该怎么串起来?

纯萌新,刚学不久,基础不太好,老师布置了个作业,做一下这段代码的课程设计,但是自己水平太差,实在搞不懂,在此求助一下各位老哥!在此先谢过老哥了!

 

  • 写回答

2条回答 默认 最新

  • 关注
    #include <stdio.h>
    #include <stdlib.h>
    #define size 11
    typedef char datatype;
    typedef struct
    {   int key;
        datatype others;
    }SeqList;
     
    int Partition(SeqList R[ ],int l,int h)
    {   /*调用Parition(R,low,high)时对R[low..high]作划分*/
        /*并返回基准记录的位置*/
    	int i,j;
    	SeqList pivot;
    	i=l;j=h;pivot=R[i];                      /*初始化,pivot为基准*/
    	while(i<j)                               /*从区间两端交替向中间扫描,直至i=j为止*/
    	{ while(i<j&&R[j].key>=pivot.key)        /*pivot相当于在位置i上*/
    	  j--;                                   /*从右向左扫描,查找第1个关键字小于pivot.key的记录R[j]*/
    	if(i<j)                                  /*表示找到的R[j]的关键字<pivot.key*/
    		R[i++]=R[j];                         /*相当于交换R[i]和R[j],交换后i指针加1*/
    	while(i<j&&R[i].key<=pivot.key)          /*pivot相当于在位置j上*/
    		i++;                                 /*从左向右扫描,查找第1个关键字大于pivot.key的记录R[i]*/
    	if(i<j)                                  /*表示找到了R[i],使R[i].key>pivot.key*/
    		R[j--]=R[i];                         /*相当于交换R[i]和R[j],交换后j指针减1*/
    	} /*endwhile*/
    	R[i]=pivot;                              /*基准记录已被最后定位*/
    	return i;
    } /*partition*/
     
    void QuickSort(SeqList R[ ],int low,int high)
    {                                            /*对R[low.. high]快速排序*/
    	int pivotpos;                            /*划分后的基准记录的位置*/
    	if(low<high)                             /*仅当区间长度大于1时才须排序*/
    	{   pivotpos=Partition(R,low,high);      /*对R[low..high]作划分*/
    	    QuickSort(R,low,pivotpos-1);         /*对左区间递归排序*/
    		QuickSort(R,pivotpos+1,high);        /*对右区间递归排序*/
    	}
    } /*QuickSort */
     
    void main()
    {   SeqList R[size];
        int i;
        printf("输入数据:\n");
        for(i=1;i<size;i++)         scanf("%d",&R[i].key);
    	printf("\n快速排序之前\n");
    	for(i=1;i<size;i++)         printf("%d ",R[i].key);
    	QuickSort(R,1,10);
    	printf("\n快速排序之后\n");
    	for(i=1;i<size;i++)         printf("%d ",R[i].key);
    	printf("\n");
    }
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥20 易康econgnition精度验证
  • ¥15 线程问题判断多次进入
  • ¥15 msix packaging tool打包问题
  • ¥28 微信小程序开发页面布局没问题,真机调试的时候页面布局就乱了
  • ¥15 python的qt5界面
  • ¥15 无线电能传输系统MATLAB仿真问题
  • ¥50 如何用脚本实现输入法的热键设置
  • ¥20 我想使用一些网络协议或者部分协议也行,主要想实现类似于traceroute的一定步长内的路由拓扑功能
  • ¥30 深度学习,前后端连接
  • ¥15 孟德尔随机化结果不一致