| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 10371 人关注过本帖
标题:对同一列数据用各种排序法来统计分别各自交换了多少次,来比较用哪种方法交 ...
只看楼主 加入收藏
自学的数学
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:46
帖 子:967
专家分:4146
注 册:2017-11-15
收藏
得分:0 
回复 28楼 lin5161678
对于 a[10]={10,9,8,7,6,5,4,3,2,1};用你的方法来判断,还是45次,并且代码中的 if(mask) break;根本不起作用,看来对于这个数列,用冒泡法来判断和交换都始终是45次了。
2018-05-23 17:34
lin5161678
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:45
帖 子:1136
专家分:3729
注 册:2011-12-3
收藏
得分:0 
以下是引用自学的数学在2018-5-23 17:34:35的发言:

对于 a[10]={10,9,8,7,6,5,4,3,2,1};用你的方法来判断,还是45次,并且代码中的 if(mask) break;根本不起作用,看来对于这个数列,用冒泡法来判断和交换都始终是45次了。

关于这一点我已经解释过很多次了
原来你一直不理解我为什么要不停强调逆序?
mask只对逆序不起作用
其他情况 都能让交换次数少于45

https://zh.
2018-05-23 20:21
自学的数学
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:46
帖 子:967
专家分:4146
注 册:2017-11-15
收藏
得分:0 
回复 32楼 lin5161678
我用 a[10]={11,9,8,12,6,14,15,3,2,1};来验证,得出的判断和交换次数(有if(mask)break;和无 if(mask)break;都一样)是31次,就是说 if(mask)break;没用。
2018-05-23 21:07
renkejun1942
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:不是这样
等 级:贵宾
威 望:33
帖 子:1645
专家分:5297
注 册:2016-12-1
收藏
得分:5 
冒泡排序只有只有41次。

程序代码:
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
typedef int E_T;

void sort( E_T *array, int l, int r );

int main( void )
{
    E_T a[ 10 ]={10,9,8,7,6,5,4,3,2,1};
   // srand( ( unsigned long )time( NULL ) );
    

 /*   for( int i = 0; i < 10; ++i )
    {
        a[ i ] = rand() % 1000;
        printf( "%d ",a[ i ] );
    }*/
    printf( "\n" );
    sort( a, 0, 10 );
    for( int i = 0; i < 10; ++i )
        printf( "%d ", a[ i ] );
    return 0;
}


void sort( E_T *array, int l, int r )
{
    int minix, maxix;
    int R;
    int c;
    
    c=0;

    for( ; l < r; ++l, --r )
    {
        for( minix = l + 1, maxix = r - 2, R = r - 1; minix <= R; ++minix, --maxix )
        {
            if( array[ l ] > array[ minix ] )
            {
                c++;
                E_T temp = array[ l ];
                array[ l ] = array[ minix ];
                array[ minix ] = temp;
            }
            if( array[ R ] < array[ maxix ] )
            {
                c++;
                E_T temp = array[ R ];
                array[ R ] = array[ maxix ];
                array[ maxix ] = temp;
            }
        }
    }
    
    printf("jiao huan %d ci",c);
    
}


[此贴子已经被作者于2018-5-23 22:22编辑过]


09:30 05/21 种下琵琶种子,能种活么?等待中……
21:50 05/27 没有发芽。
20:51 05/28 没有发芽。
23:03 05/29 没有发芽。
23:30 06/09 我有预感,要发芽了。
2018-05-23 22:21
lin5161678
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:45
帖 子:1136
专家分:3729
注 册:2011-12-3
收藏
得分:0 
回复 33楼 自学的数学
判断次数45
交换次数31
这里我理解错了
除了逆序的确有其他序列是mask也拯救不了的

https://zh.
2018-05-23 23:07
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
收藏
得分:0 
对于mark有没有效果~

int a[]={1,2,3,4,5,6,7,8,9,0};
就是一个好好的例子~

[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2018-05-23 23:32
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
收藏
得分:0 
回复 34楼 renkejun1942
以前我看不出这个程序有什么可以优化的地方,但现在感觉应该是可以减少平均交换次数而起到优化作用吧~

[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2018-05-23 23:48
renkejun1942
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:不是这样
等 级:贵宾
威 望:33
帖 子:1645
专家分:5297
注 册:2016-12-1
收藏
得分:0 
回复 37楼 九转星河
比如呢?

09:30 05/21 种下琵琶种子,能种活么?等待中……
21:50 05/27 没有发芽。
20:51 05/28 没有发芽。
23:03 05/29 没有发芽。
23:30 06/09 我有预感,要发芽了。
2018-05-24 11:15
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
收藏
得分:0 
回复 38楼 renkejun1942
我表示的只是一种猜测,实际上我也好奇为啥这种做法会比一般的冒泡排序要快,还是要请 renkejun1942明示一下才行~

[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2018-05-24 11:17
renkejun1942
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:不是这样
等 级:贵宾
威 望:33
帖 子:1645
专家分:5297
注 册:2016-12-1
收藏
得分:0 
回复 39楼 九转星河
因为同时从两头开始“冒泡”。

[此贴子已经被作者于2018-5-24 11:45编辑过]


09:30 05/21 种下琵琶种子,能种活么?等待中……
21:50 05/27 没有发芽。
20:51 05/28 没有发芽。
23:03 05/29 没有发芽。
23:30 06/09 我有预感,要发芽了。
2018-05-24 11:28
快速回复:对同一列数据用各种排序法来统计分别各自交换了多少次,来比较用哪种方 ...
数据加载中...
 
   



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

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