标题:拆入排序法为啥第一个总是不换位置
只看楼主
叶纤
Rank: 8Rank: 8
等 级:禁止访问
威 望:1
帖 子:658
专家分:848
注 册:2019-11-22
结帖率:100%
已结贴  问题点数:20 回复次数:6 
拆入排序法为啥第一个总是不换位置
输入56,4 ,6 ,34 ,6 ,8 ,5 ,67 ,5 ,4
结果数组的第一位总是不变,为啥吗
56
4
4
5
5
6
6
8
34
67


Running Time:166ms

#include<stdio.h>
#include<time.h>   //用到clock()函数
#include<iostream>
int main() {
    int begintime,endtime;
    begintime=clock();  //计时开始
   
int a[10]= {56,4 ,6 ,34 ,6 ,8 ,5 ,67 ,5 ,4};
   // for(int i=0; i<10; ++i)
    //{   std::cin>>a[i];
   // }
    for(int j=2; j<10; ++j)
    {    int tem=a[j];int i=0;
        for(i=j-1; i>0&&a[i]>tem; --i)
        {   //int tem=a[i+1];
            a[i+1]=a[i];
            //a[i]=tem;  
         }
         a[i+1]=tem;
        
    }
    for(int i=0; i<10; ++i)
    { std::cout<<a[i]<<std::endl;
    }

    endtime = clock();  //计时结束
    printf("\n\nRunning Time:%dms\n", endtime-begintime);
    return 0;
}
搜索更多相关主题的帖子: for 排序 time std int 
2020-01-31 23:51
林月儿
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:湖南
等 级:版主
威 望:138
帖 子:2276
专家分:10647
注 册:2015-3-19
得分:10 
int main() {
    int begintime,endtime;
    begintime=clock();  //计时开始
   
int a[10]= {56,4 ,6 ,34 ,6 ,8 ,5 ,67 ,5 ,4};
   // for(int i=0; i<10; ++i)
    //{   std::cin>>a[i];
   // }
    for(int j=2; j<10; ++j)
    {    int tem=a[j];int i=0;
        for(i=j-1; i>0&&a[i]>tem; --i)
        {   //int tem=a[i+1];
            a[i+1]=a[i];
            //a[i]=tem;  
         }
         a[i+1]=tem;
        
    }
    for(int i=0; i<10; ++i)
    { std::cout<<a[i]<<std::endl;
    }

    endtime = clock();  //计时结束
    printf("\n\nRunning Time:%dms\n", endtime-begintime);
    return 0;

代码不加行标没法看
内循环里面有i>0的判断,所以首位不访问,其次i在内循环被赋值j-1
所以上面的i=0就没用了
代码缩进,空格不规范,上传无行标不方便分析

剑栈风樯各苦辛,别时冰雪到时春
2020-02-01 06:55
林月儿
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:湖南
等 级:版主
威 望:138
帖 子:2276
专家分:10647
注 册:2015-3-19
得分:0 
这个排序在实际开发工作中,一般只是补充一下排序的规则
具体的实现由库函数自己实现,建议先走马观花把其他的数据结构,算法了解一下再回过头看看感兴趣的
深入研究一下

剑栈风樯各苦辛,别时冰雪到时春
2020-02-01 07:06
纯蓝之刃
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:76
帖 子:554
专家分:3690
注 册:2019-7-29
得分:10 
程序代码:
#include<stdio.h>
#include<time.h>   //用到clock()函数
#include<iostream>

int main()
{
    int begintime,endtime;
    begintime=clock();  //计时开始

    int a[10]= {56,4 ,6 ,34 ,6 ,8 ,5 ,67 ,5 ,4};
   // for(int i=0; i<10; ++i)
    //{   std::cin>>a[i];
   // }
    for(int j=1; j<10; ++j)         //这里
    {
        int tem=a[j],i=0;
        for(i=j-1; i>=0&&a[i]>tem; --i) //这里
        {   //int tem=a[i+1];
            a[i+1]=a[i];
            //a[i]=tem;
         }
         a[i+1]=tem;

    }
    for(int i=0; i<10; ++i)
    {
        std::cout<<a[i]<<std::endl;
    }

    endtime = clock();  //计时结束
    printf("\n\nRunning Time:%dms\n", endtime-begintime);
    return 0;
}
收到的鲜花
  • 叶纤2020-02-01 12:25 送鲜花  1朵   附言:感谢

一沙一世界,一花一天堂。无限掌中置,刹那成永恒。
2020-02-01 07:33
叶纤
Rank: 8Rank: 8
等 级:禁止访问
威 望:1
帖 子:658
专家分:848
注 册:2019-11-22
得分:0 
感谢大佬们,理解了,j可以等于0、1,但一定不要等于大于等于2的,如果等于2则第0位永远排序不到

把学习时间浪费在混坛上是傻瓜行为,更何况自己的水平连一两都没到。
2020-02-01 12:14
雪影辰风
Rank: 6Rank: 6
来 自:衡阳市
等 级:贵宾
威 望:22
帖 子:177
专家分:387
注 册:2019-6-17
得分:0 
有关细节问题你需要多注意一下,还有,如果你是做OI的话,我推荐你把所有的排序方法都了解一下,大概六七种
2020-02-01 13:26
叶纤
Rank: 8Rank: 8
等 级:禁止访问
威 望:1
帖 子:658
专家分:848
注 册:2019-11-22
得分:0 
回复 6楼 雪影辰风
感谢

把学习时间浪费在混坛上是傻瓜行为,更何况自己的水平连一两都没到。
2020-02-01 13:32



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-499057-1-1.html




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

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