插入法排序
发表在C语言图书答疑 2016-07-26
是否精华
版块置顶:

int i;
int a[10];
int iTemp;
int iPos;

printf("为数组元素赋值:\n");
for(i=0;i<10;i++)
{
printf("a[%d]=",i);
scanf("%d",&a[i]);
}

for(i=1;i<10;i++)
{
iTemp=a[i];
iPos=i-1;
while((iPos>=0)&&(iTemp<a[iPos]))
{
a[iPos+1]=a[iPos];
iPos--;
}
a[iPos+1]=iTemp;
}
和下面的while里面的  &&(iTemp<a[iPos])为什么后面不能直接用a[i]而是用iTemp呢?

{
iTemp=a[i];
iPos=i-1;
while((iPos>=0)&&([font color=#FF0000]a[i][/font]<a[iPos]))
{
a[iPos+1]=a[iPos];
iPos--;
}
a[iPos+1]=iTemp;
}
分享到:
精彩评论 1
again
学分:250 LV4
2016-07-26
沙发
            display(i);
            iTemp = a[i];
            iPos = i - 1;
            // 此处的作用是:从第iPos位置开始向前寻找一个合适的位置,放置第i个元素;
            // 具体处理方案是:
            //    从第iPos位置开始向前(下标减小,直到0为止)寻找 大于 第i个元素(也就是iTemp)的值
            //    如果找到,就把此位置的元素向后移动一位,并继续向前寻找,一直重复这个过程,直到跳出while循环为止
            //    之后再把跳出位置的元素赋值为 iTemp,这个位置也就是iTemp要插入的位置
            //再看看 不使用iTemp 而使用 a[i]有什么问题:
            // 举个例子: 如果当前数组状态是这样  ...  9,         8
            //                                      a[iPos]    a[i]
            // 此时 a[i]<a[iPos],进行赋值,之后的状态是这样的:
            //                                      9,         9(这里把a[i]的值给改变了)
            //                                      a[iPos]    a[iPos+1] : iPos = i -1 => iPos+1 = i;

            while ((iPos >= 0) && (iTemp < a[iPos]))
            {
                a[iPos + 1] = a[iPos];
                iPos--;
            }
            a[iPos + 1] = iTemp;
首页上一页 1 下一页尾页 1 条记录 1/1页
手机同步功能介绍
友情提示:以下图书配套资源能够实现手机同步功能
明日微信公众号
明日之星 明日之星编程特训营
客服热线(每日9:00-17:00)
400 675 1066
mingrisoft@mingrisoft.com
吉林省明日科技有限公司Copyright ©2007-2022,mingrisoft.com, All Rights Reserved长春市北湖科技开发区盛北大街3333号长春北湖科技园项目一期A10号楼四、五层
吉ICP备10002740号-2吉公网安备22010202000132经营性网站备案信息 营业执照