注册 登录
编程论坛 C语言论坛

直接插入排序方式

wfx753951 发布于 2020-01-31 17:11, 2971 次点击
直接排序插入法为什么i=2的时候s[i]=12
输入数组为:25 12 36 45 2 9 39 22 98 37
只有本站会员才能查看附件,请 登录
只有本站会员才能查看附件,请 登录
11 回复
#2
纯蓝之刃2020-01-31 18:17
论坛传统,发代码帖要发源代码,不要使用图片,次数多了,易被封号。
#3
wmf20142020-01-31 22:07
因为你数据输入时是从编号为1的位置开始存入到数组的。
#4
叶纤2020-01-31 22:15
//我照着算法导论给的伪代码敲了一遍,感觉和你的代码偏差很大,我也不知道我这个是不是插入排序法
只有本站会员才能查看附件,请 登录

#include<iostream>
using namespace std;
int main()
{   int a[10]= {};
    for(int i=0; i<10; ++i)
    {   cin>>a[i];
    }
    for(int j=2; j<10; ++j)
    {   
        for(int i=j-1; i>0&&a[i]>a[i+1]; --i)
        {   int tem=a[i+1];
            a[i+1]=a[i];
            a[i]=tem;  
         }
        
    }
    for(int i=0; i<10; ++i)
    {   cout<<a[i]<<endl;
    }
}
#5
叶纤2020-01-31 23:14
发现4楼代码和图片不一样 改改
#include<stdio.h>
#include<time.h>   //用到clock()函数
#include<iostream>
int main() {
    int begintime,endtime;
    begintime=clock();  //计时开始
   
int a[10]= {};
    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;
}

[此贴子已经被作者于2020-1-31 23:42编辑过]

#6
叶纤2020-01-31 23:46
额。。发现5楼代码有错误,我还一时解决不了
#7
wfx7539512020-02-01 20:03
回复 2楼 纯蓝之刃
谢谢,我是第一次在这个论坛发帖,以后会注意
#8
wfx7539512020-02-01 20:05
回复 4楼 叶纤
我是初学者,方法应该挺多的,主要是个中细节我不太明白
#9
wfx7539512020-02-01 20:07
回复 3楼 wmf2014
哇,谢谢你,一针见血
#10
wmf20142020-02-01 20:49
回复 6楼 叶纤
//我来帮你解决吧,代码红色的为修改部分
    int a[10] = { 25,12,36,45,2,9,39,22,98,37 };
    for (int j = 1; j < 10; ++j)
    {
        int tem = a[j]; int i = 0;
        for (i = j - 1; i >= 0 && a[i] > tem; --i)
#11
叶纤2020-02-01 22:59
回复 10楼 wmf2014
谢谢你大佬我在c++论坛已经找到错误了,话说我的代码和楼主的代码一模一样,楼主也应该会出现同样的问题才对
1