原创 插入排序算法

2013-8-21 16:26 1136 17 18 分类: 消费电子

        对比打扑克牌时抓牌的过程讲述插入排序的实现过程如下:每抓一张牌类似于从要排序的数组中顺序取出一个数,抓到牌后我们会将新抓到的牌和手中已经排好序(因为每抓一张牌都会进行排序所以手中的牌一直都是排好序的)的牌从右至左依次比对,如果新抓的牌比手中的某一张牌小(升序排列)那么将其和该张牌交换位置,直到将手中所有牌都比对一遍(其实并不需要完全比对,只需比对到新抓的牌比当前手中某一位置的牌大即可),如此等到抓完牌时,手中的牌已经是从小到大排好序的。我们将手中的牌暂定为数据队列,如果数组中有N个数,那么我们需要抓N-1次(单独一个数无法比对)并进行N-1次队列排序(每次队列排序实质上就是找出新抓的牌应该放在什么位置,对此我们采用的方法是将新抓的牌从右至左依次和队列中的数据比对直到和相邻的两个数的大小关系不一致时,说明新抓的牌应该插入这两个数之间)。具体程序代码如下:

 

#include

#define    LEN       10

int a[LEN] = {10, 5, 3, 4,2,1 ,3,5,8,90};

void insertion_sort()

{

       int i = 0, j = 0, key = 0;

       for(j = 1; j < LEN; j++)               // 新抓一张牌

       {

              for(i = j - 1; i >= 0; i--)        // 队列插入排序

              {

                     if(a > a[i+1])             // 自右至左寻找插入点

                     {

                            key = a;

                            a = a[i+1];

                            a[i+1] = key;

                     }

                     else                              // 找到插入点后无需继续比对,提高程序效率

                            break;

              }    

       }

}

int main()

{

       int i = 0;

       for(i = 0; i < LEN; i++)

              printf("%-4d",a);

       printf("\n");

       insertion_sort();

       for(i = 0; i < LEN; i++)

              printf("%-4d",a);

       printf("\n");

       return 0;

}

文章评论1条评论)

登录后参与讨论

用户1263584 2013-8-23 09:06

效率太低!你可以搜索一下快速排序算法。
相关推荐阅读
462629051_256703759 2014-06-08 21:56
产品研发的一点想法
        产品研发的核心是产品,研发是为了实现产品,所以能够快速设计出稳定的产品才是研发的目的。通过对比自己身边的一些项目产生了一些想法,总体来说就是尽可能采用半导体厂商的最成熟方案尽可能和...
462629051_256703759 2014-03-01 12:34
LED子系统
        Linux驱动中已经将led驱动作为一个子系统来实现了,针对Tiny210采用通用IO口来控制led的情况,linux采用platform驱动来实现led子系统,因此我们可以通过l...
462629051_256703759 2014-02-27 22:47
git入门
15.1、安装git $sudo apt-get install git $sudo apt-get install git-core 更新git $git clone git:/...
462629051_256703759 2014-02-27 15:05
Vim + Ctags + Taglist组合
12.1、Ctags和Taglist插件的安装: 12.1.1、Ctags插件的安装:sudo apt-get install ctags 12.1.2、Taglist插件的安装:首先下载...
462629051_256703759 2013-09-23 15:57
改善电源负载瞬态响应性能的设计方法
        以前对电源芯片的理解停留在输出电压是否满足需求、输出电流是否满足负载等一些静态的参数上,但是后来发现即使这些参数满足要求所选用的电源芯片有可能还是不能满足负载瞬变时的波动,所以就查...
462629051_256703759 2013-09-05 14:33
MSP430两种串口升级方式对比
        早上收到网友咨询MSP430单片机串口升级问题的邮件,因为不是第一次收到这样的帮助请求,于是便把自己做过的两种串口升级方式做一对比希望对此问题感兴趣的工程师朋友可以从中受益,也希望...
我要评论
1
17
关闭 站长推荐上一条 /2 下一条