| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 390 人关注过本帖
标题:新学的归并排序,给参谋一下......有兴趣的自己思考下.......
只看楼主 加入收藏
C_戴忠意
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:2
帖 子:575
专家分:1349
注 册:2011-10-21
结帖率:100%
收藏
 问题点数:0 回复次数:6 
新学的归并排序,给参谋一下......有兴趣的自己思考下.......
程序代码:
#include <stdio.h>

#define MAX 10

int arr[MAX];
int tmp[MAX];

void ComSort(int start,int end)
{
    int i;
    int mid=(start+end)/2;
    int p,q;
    if(start>end||start==end) return;

    printf("START:%d-%d\n",start,end);
    for(i=start;i<=end;i++)

    {
        printf("%d ",arr[i]);
    }
    printf("\n");

    ComSort(start,mid);
    ComSort(mid+1,end);

    p=start;
    q=mid+1;
   

    for(i=start;i<=end;i++)

    {
        tmp[i]=0;
    }
    i=start;
    while(p<=mid&&q<=end)
    {
        if(arr[p]>arr[q])

        {
            tmp[i]=arr[q];
            q++;
        }
        else
        {
            tmp[i]=arr[p];
            p++;
        }
        i++;
    }
    if(p>mid)
    {
        while(q<=end)
        {
            tmp[i]=arr[q];
            i++;
            q++;
        }
    }
    if(q>end)
    {
        while(p<=mid)
        {
            tmp[i]=arr[p];
            i++;
            p++;
        }
    }
    for(i=start;i<=end;i++) arr[i]=tmp[i];

    printf("END:%d-%d\n",start,end);
    for(i=start;i<=end;i++)

    {
        printf("%d ",arr[i]);
    }
    printf("\n");
}

int main()
{
    int i;
    for(i=0;i<MAX;i++) scanf("%d",&arr[i]);
    ComSort(0,MAX-1);
    for(i=0;i<MAX;i++) printf("%d ",arr[i]);
    printf("\n");
    return 0;
}

//23 56 4 67 26 37 76 34 89 35


[ 本帖最后由 C_戴忠意 于 2012-3-30 22:29 编辑 ]
搜索更多相关主题的帖子: start 
2012-03-30 22:25
czz5242199
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:4
帖 子:660
专家分:2400
注 册:2011-10-26
收藏
得分:0 
出一小题:

给出n个数,a1....an,定义逆序对为i<j,但ai>aj,如1,3,2中有1个逆序对(3,2)

给出一个尽量高效的算法,考虑下归并排序

[ 本帖最后由 czz5242199 于 2012-3-30 23:53 编辑 ]
2012-03-30 23:19
Devil_W
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
威 望:9
帖 子:1160
专家分:1797
注 册:2009-9-14
收藏
得分:0 
以下是引用czz5242199在2012-3-30 23:19:05的发言:

出一小题:
 
给出n个数,a1....an,定义逆序对为iaj,如1,3,2中有1个逆序对(3,2)
 
给出一个尽量高效的算法,考虑下归并排序
我觉得楼主做不出来。
2012-03-31 00:15
草狼
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:2
帖 子:577
专家分:1040
注 册:2010-4-6
收藏
得分:0 
回复 2楼 czz5242199
这题貌似用数状数组 比较容易
2012-03-31 09:33
czz5242199
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:4
帖 子:660
专家分:2400
注 册:2011-10-26
收藏
得分:0 
回复 4楼 草狼
嗯,树状数组也可以做,归并排序也行,都是O(nlogn)的复杂度
2012-03-31 10:06
葬魂塚
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2012-3-31
收藏
得分:0 
好长   晕晕的
2012-03-31 11:04
姚杰
Rank: 6Rank: 6
等 级:侠之大者
威 望:1
帖 子:169
专家分:477
注 册:2010-6-1
收藏
得分:0 
。。。。。。。。。。。。。。。。。。。。

持之以恒,别留遗憾,加油
2012-03-31 17:56
快速回复:新学的归并排序,给参谋一下......有兴趣的自己思考下.......
数据加载中...
 
   



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

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