插入法排序

来源:互联网 发布:java调用http接口json 编辑:程序博客网 时间:2024/06/16 06:18

插入法排序较为复杂,其基本工作原理是抽出一个数据,在前面的数据中寻找相应的位置插入,直到完成排序。以数字9、6、15、4、2为例,采用插入法实现数字按从小到大进行排序,插入法排序过程如图8.23所示。


图8.23  插入法排序过程示意图

从图8.23可以发现,在第一次排序过程中将第一个数取出来,并放置在第一个位置;然后取出第二个数,并将第二个数与第一个数进行比较,如果第二个数小于第一个数,则将第二个数排在第一个数之前,否则将第二个数排在第一个数之后;然后取出下一个数,先与排在后面的数字进行比较,如果当前数字比较大则排在最后,如果当前数字比较小,还要与之前的数字进行比较,如果当前数字比前面的数字小,则将当前数字排在比它小的数字和比它大的数字之间,如果没有比当前数字小的数字,则将当前数字排在最前方;依此类推,不断取出未进行排序的数字与排序好的数字进行比较,并插入到相应的位置,直到将一组数字按从小到大排序为止。

下面通过实例来看一下如何通过程序使用插入法实现数组元素从小到大的排序。


实例  利用插入排序法,从少到多输出显示老年人的数量


政府福利,根据老年人数发放养老补助。在本实例中,声明了一个整型数组和两个整型变量,其中整型数组用于存储用户输入的数字,而两个整型变量分别作为两个元素交换时的中间变量和记录数组元素位置,然后通过双层循环进行插入法排序,最后将排好序的数组进行输出。具体代码如下:

01  #include<stdio.h>/*包含头文件*/02  int main()      /*主函数main*/03  {04       int i;                                      /*定义变量*/05       int a[10];06       intiTemp;07       intiPos;08       printf("输入老人数:\n");                   /*提示信息*/09       for(i=0;i<10;i++)                           /*输入老人数据*/10       {11           printf("a[%d]=",i);12           scanf("%d", &a[i]);13       }14   15       /*从小到大排序*/16       for(i=1;i<10;i++)                           /*循环数组中元素*/17       {18           iTemp = a[i];                       /*设置插入值*/19           iPos = i-1;20           while((iPos>=0) &&(iTemp<a[iPos]))         /*寻找插入值的位置*/21           {22               a[iPos+1] = a[iPos];                    /*插入数值*/23               iPos--;24           }25           a[iPos+1] = iTemp;26       }27   28       /*输出数组*/29       for(i=0;i<10;i++)30       {31           printf("%d\t",a[i]);                    /*输出制表位*/32           if(i == 4)                      /*如果是第5个元素*/33               printf("\n");           /*输出换行*/34       }35   printf("\n");36   37       return 0;                           /*程序结束*/38  }

运行程序,显示结果如图8.24所示。


图8.24  插入法排序运行图

从该实例代码和运行结果可以看出:

(1)声明一个整型数组a,并通过键盘为数组元素赋值。

(2)设置一个嵌套循环,第一层循环为后9个数组元素,将第二个元素赋值给中间变量,并记录前一个数组元素的下标位置。在第二层循环中,首先要判断是否符合循环的条件,允许循环的条件是记录的下标位置必须大于等于第一个数组元素的下标位置,并且中间变量的值小于之前设置下标位置的数组元素,如果满足循环条件,则将设置下标位置的数组元素值赋值给当前的数组元素。

(3)然后将记录的数组元素下标位置向前移动一位,继续进行循环判断。内层循环结束以后,将中间变量中保存的数值赋值给当前记录的下标位置之后的数组元素,继续进行外层循环,将数组中下一个数组元素赋值给中间变量,再通过内层循环进行排序。

(4)依此类推,直到循环结束,这时就将数组元素按照从小到大的顺序重新排列了。

(5)循环输出数组中的元素,并在输出5个元素后进行换行,在下一行输出后面的5个元素。


感谢读者朋友对明日科技的支持,如果您对图书中的讲解及光盘源码有任何问题,可以直接登录http://www.mingrisoft.com上的社区进行发贴,把您的问题详细的说明一下,我们的技术人员会在那里给您回复!

本文摘自明日科技出版的《零基础学C语言》,转载请注明出处!!!


阅读全文
'); })();
0 0
原创粉丝点击
热门IT博客
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 四字潮语 网上潮语 乘龙怪婿潮语版 潮语歌曲排行榜 钱王射潮 潮安胶囊多少钱一盒 广东潮阳 潮阳网 潮阳在哪里 潮阳市 潮阳区有多少个镇 潮阳区职业技术学校 汕头市朝阳区 汕头朝阳区 潮阳县沙陇镇 水野潮阳黑人 潮阳吧 汕头市潮阳区格林豪泰 潮阳火车站 潮鞋货源网 max潮鞋 潮鞋嘘 女 潮鞋 潮牌鞋子品牌 鞋子潮牌有哪些 潮鞋图 买潮鞋 男士潮牌鞋 欧美潮牌鞋 男生潮牌鞋子 鞋子 潮牌 潮鞋专卖 鞋子有什么潮牌 男生鞋子潮牌 潮牌鞋子大全 藤原浩的潮牌鞋子ape 时尚潮流鞋子 男生鞋子潮流板鞋 鞋子潮流品牌 男生鞋子潮流鞋 鞋店取名潮一点