| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1537 人关注过本帖
标题:求助,谁帮忙给我讲解一下这个程序
只看楼主 加入收藏
fuq349996693
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2016-3-11
结帖率:0
收藏
 问题点数:0 回复次数:5 
求助,谁帮忙给我讲解一下这个程序
#include  <stdio.h>
#include  <time.h>
#include  <stdlib.h>  
void RandomizedPartition(int *data,int x,int y,int *temp)           // 这个函数看不懂。帮忙讲解一下。
{  
    int p,q,m,i=x;
    if(y-x>1)
    {  
        m  =  x+(y-x)/2;
        p  =  x;
        q  =  m;  
        RandomizedPartition(data,x,m,temp);
        RandomizedPartition(data,m,y,temp);
        while
            (p<m||q<y)
        {  
            if
                (q>=y||(p<m&&data[p]<data[q]))
            {  
                temp[i++]  =  data[p++];
            }
            else
               
            {  
                temp[i++]  =  data[q++];
            }
        }  
        
        for
            (i=x;i<y;i++)
            data[i]  =  temp[i];
    }
}
void QuickSort(int *data,int x,int y)
{  
    int    p=x,q=y-1,temp;
    while
        (p<q)
    {  
        while
            (q>p&&data[q]>=data[p])
            q--;
        if(q>p)
        {  
            temp  =  data[p],data[p]  =  data[q],data[q]  =temp;
            p++;
        }  
        while
            (q>p&&data[p]<=data[q])
            p++;
        if
            (p<q)
        {  
            temp  =  data[p],data[p]  =  data[q],data[q]  =temp;
            q--;
        }  
        if
            (p==q)
        {  
            QuickSort(data,x,p);
            QuickSort(data,p+1,y);
        }
    }
}  
int main()
{  
    int data[10],i;
    int temp[10];
    srand(time(NULL));        
    for
        (i=0;i<10;i++)
    {  
        data[i]  =  rand()%100;
    }
    printf("排序之前:");
    for
        (i=0;i<10;i++)
    {  
        printf("%d  ",data[i]);
    }  
    printf("\n");  
    QuickSort(data,0,10);
    printf("排序之后:");
    for
        (i=0;i<10;i++)
    {  
        printf("%d  ",data[i]);
    }  
    printf("\n");
}  
搜索更多相关主题的帖子: include 
2016-03-25 09:41
qq1023569223
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:湖南科技大学
等 级:贵宾
威 望:26
帖 子:2753
专家分:13404
注 册:2010-12-22
收藏
得分:0 
光一堆代码,你什么都不说,我们也能看得懂了?

   唯实惟新 至诚致志
2016-03-25 09:45
匆匆来过
Rank: 1
来 自:广州
等 级:新手上路
帖 子:26
专家分:9
注 册:2015-12-27
收藏
得分:0 
好像是把10个数按从小到大输出,太长了,看不下去

努力打代码
2016-03-26 14:20
书生牛犊
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:星夜征程
等 级:贵宾
威 望:10
帖 子:1101
专家分:5265
注 册:2015-10-27
收藏
得分:0 
程序代码:
这是个递归程序,归并排序(二分法),空间复杂度2N,时间复杂度NlogN 。

 其中的data数组是有效数据的源地址,temp数组是用来在程序中暂时保存

 数据,

void RandomizedPartition(int *data,int x,int y,int *temp)           // 这个函数看不懂。帮忙讲解一下。
{ 
    int p,q,m,i=x;
    if(y-x>1)//如果不满足就以为当前列里只有一个元素,无需排序,往上返回
    {  //
        m  =  x+(y-x)/2;//把n个元素分成一样长的两段。
        p  =  x;//
        q  =  m;  //
        RandomizedPartition(data,x,m,temp);//排序左子列
        RandomizedPartition(data,m,y,temp);//排序右子列
        while            //整个while循环是把相邻两个有序子列排序结合起来
            (p<m||q<y)
        { 
            if
                (q>=y||(p<m&&data[p]<data[q]))
            { 
                temp[i++]  =  data[p++];
            }
            else
              
            { 
                temp[i++]  =  data[q++];
            }
        } 
       
        for//把排列后的数据保存到data数组中去; ①
            (i=x;i<y;i++)
            data[i]  =  temp[i];
    }
    ①:其实这个for循环还是可以省略不写的,但要把程序中两个RandomizePartition
    的参数列表data,temp,互相交换下位置,这样,每次在递归调用的时候,就能
    把data和temp中的元素互相倒来倒去,而最终排好序的数据会是保存在temp当中
    不管这个序列有多少个元素,不管程序递归多少层,反正最终处理的,一定
    实在temp中,至于为什么。。。。
    推荐你去中国大学MOOC,搜索陈越/何钦铭老师的《数据结构》第七讲排序(上)7.4归并排序
    注意:该课程目前在网易云课堂有开课但进度不够,你可以在中国大学MOOC中“查看存档”
}


φ(゜▽゜*)♪
2016-04-04 20:55
书生牛犊
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:星夜征程
等 级:贵宾
威 望:10
帖 子:1101
专家分:5265
注 册:2015-10-27
收藏
得分:0 
回复 4楼 书生牛犊
于此同时,根据
http://
博客中的观点,RandomizedPartition这个函数名的含义是随机分割,本事为了搭配快排使用,他的函数内容应该是博客中写的那样。
你所写的那段代码,通用的名字应该是Merge_sort(归并排序)。

排序算法历来是数据结构与算法的最基础的东西,他们的命名都是约定俗成的,希望你能够尽量学习使用,这样有助于你更快找到你所需要的资料。我在给你找材料的过程中遇到很多很棒的讲解,推荐你去看看
http://www.
囊括13种排序名称/代码及图解/FLASH动画等。

φ(゜▽゜*)♪
2016-04-04 21:04
Redeyes
Rank: 4
来 自:中国
等 级:业余侠客
威 望:1
帖 子:301
专家分:292
注 册:2015-5-13
收藏
得分:0 
同学,我只想问下这代码是你自己写的,还是在书上照着敲的?

做一名健壮的技术青年,如果未来无法用代码去改变世界,还可以考虑去搬砖。
2016-04-05 12:54
快速回复:求助,谁帮忙给我讲解一下这个程序
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.028082 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved