插入排序

插入排序的基本思想是:每步将一个待排序的纪录,按其关键码值的大小插入前面已经排序的文件中适当位置上,直到全部插入完为止。
把一个数据插入到有序序列中使之仍然有序,但是有序序列长度逐渐增长,
第一次把第一个数当有序 序列 ,拿出第二个数 插入
以此类推

概括为挖坑-逆序比较-后移-填坑

开始,i=1,j=0,temp=a[i],把a[0]当成第一个长度为1的有序序列,取出待插入数(a[1]从第二个开始)放到一边去(存到temp中),也就挖了一个坑出来,开始从后往前与temp比较
大于temp ,a[j]后移(此时坑位也向前移动了一个位置)记录坑位,再与j前面的j-1比较,直至j=0或temp>a[j]为止,将temp插入填坑
关键字 : 挖坑 - 倒序比较-后移-记录坑位置-填坑
代码思路
先把第一个数当成 一个长度为1的有序序列,取出第二个数,现在空位是位置2,然后从后往前开始比较,若取出来的数小于被比较数则被比较数后移,然后被比较熟换成它前面的一个数继续比较
//1确定插入位置, 2后移, class insertOrder:order { private int[] a; private int Local = 0; //记录插入位置 private int temp = 0,i=0,j=0; public insertOrder(int[] b) { a = b; } public int[] orderBy() { for (i = 1; i < a.Length;i++ ) { temp = a[i]; //把a[i] 取出来, 从第二个记录开始 for ( j = i-1 ; j >= 0 && (temp < a[j]); j--) { a[j + 1] = a[j];//后移 Local = j;//记录需要插入位置,记录坑位 } a[Local] = temp;//插入 } return a; } }

 

posted @ 2016-04-26 20:56  小司机  阅读(159)  评论(0编辑  收藏  举报