| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 5285 人关注过本帖, 1 人收藏
标题:看了上次的回文串排序有感而发,出个题大家玩玩
只看楼主 加入收藏
ehszt
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:40
帖 子:1745
专家分:3216
注 册:2015-12-2
收藏
得分:0 
以下是引用kin3z在2017-3-30 11:13:15的发言:
 
我赞同你的方法,就算用数组来实现,为(O/2):i = n/2+n%2;  
i 为循环次数, n 为元素个数,以头尾对调的方式。

关键是有时候调换的数据不止2个,有的时候又只有一个,不过调换函数还是要改进一下。
说一下,大体n个元素的排序大体分三步(优化以上算法):
第一步,把n/2个元素移到前面第二个
第二步,把从数列最大值开始减k的连续两个数移到最前面加k+1的地方。如:15678234把82移到1号位置变成82156734再移动次大的,把73移动8和2之间,……这样一共移动(n-1)/2次。
第三步,如果该数列为偶数还需移动一次,就是把最后一个数移到它该去的地方,如87643215把5移动6和4之间。如果是奇数列此步就不用进行。
实现,大家看能不能优化一下,要能像吹版那样最好。

[此贴子已经被作者于2017-3-30 21:22编辑过]

2017-03-30 17:33
ehszt
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:40
帖 子:1745
专家分:3216
注 册:2015-12-2
收藏
得分:0 
用吹版的方法简化了下,但只能显示1-9的排序。
#include <stdio.h>
#include <string.h>
void insert(char *a,int frompos,int len,int topos)
{
    char temp[10],temp1[10];
    int i=frompos+len-1-topos;
    strncpy(temp,a+frompos-1,len);
    strncpy(temp1,a+topos-1,frompos-topos);
    strncpy(a+topos-1,temp,len);
    strncpy(a+topos-1+len,temp1,frompos-topos);
}

main()
{
   
    int m,k,i,max,j=1,n;
    scanf("%d",&n);
    char a[10];
    max=n;
    for(i=0;i<n;i++)
    {
        a[i]=i+'1';
    }

    a[i]='\0';
    i=k=n/2;
    m=(n-1)/2;
    printf("%s\n",a);
    insert(a,n+1-k,k,2);
    printf("%s\n",a);
    while(m--)
    {
        insert(a,i+1,2,j);
        j++;
        i++;
        printf("%s\n",a);
    }
    if(n%2==0)
    {insert(a,n,1,k);
    printf("%s\n",a);}
    return 0;
}
2017-03-30 21:11
菜鸟小小C
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2017-4-5
收藏
得分:0 
算来算去都是四部
2017-04-06 21:44
awwwqqq
Rank: 2
等 级:论坛游民
帖 子:13
专家分:11
注 册:2017-3-31
收藏
得分:0 
以下是引用ehszt在2017-3-24 07:14:48的发言:

给定一个数组a[5]={1,2,3,4,5};
如何用最少的次数使这个排列倒序。
移动方法:一次只能移动相邻的几个数,可以把相邻的数插入到数列中任何位置。
计数方法:每插入一次计为一次。
看谁能用最快的方法求出结果,并打印过程。



我想知道怎么用有效的排序方法呢???
2017-04-06 22:42
beichei5d
Rank: 4
等 级:业余侠客
威 望:2
帖 子:89
专家分:270
注 册:2016-3-8
收藏
得分:0 
回复 20楼 吹水佬
很强大,学习了

你现在所偷的懒,都将成为以后扇你的巴掌!共勉吧。。。
2017-04-07 08:12
菜鸟小小C
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2017-4-5
收藏
得分:0 
受教了
2017-04-08 19:37
快速回复:看了上次的回文串排序有感而发,出个题大家玩玩
数据加载中...
 
   



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

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