闫新宇 2015-02-06
插入排序
package com.jx.p2p.service;
//插入排序 插入排序算法是一个对少量元素进行排序的有效算法
public class Test {
static int x;//当前指向数据
static int y;//当前指向数据前面位置
public static void getinsertMethod(int[] omts){
int length = omts.length;
for(x=1;x<length;x++){//从数组的第二个位置开始执行插入排序,因为假如从第一个数来算的话,找不到插入位置
int current_value = omts[x];
y=x-1;
//顺序从大到小
while(y>=0 && omts[y]<current_value){//遍历当前元素前的《已经进行过插入操作的前半部分数据》 假如前面的元素比当前元素小,就一直往前移动比对
omts[y+1]=omts[y];//满足上面条件情况下,需要将已经排好序的小的元素往后移动,以便将当前元素放置到适合的位置,假如不这样操作的话,会影响整体排序
y--;
}
//找到了能够插入的位置y,证明此时y位置上的值比current_value大,那么此时就将current_value插入到y+1位置上即可,进行下次判断插入
omts[y+1]=current_value;
}
for(int item:omts){
System.out.println(item);
}
}
public static void main(String[] args) {
getinsertMethod(new int[]{23,32,56,98,47,51,24,55});
}
}
引致:http://zhdkn.iteye.com/blog/1136253
要知道时间复杂度只是描述一个增长趋势,复杂度为O的排序算法执行时间不一定比复杂度为O长,因为在计算O时省略了系数、常数、低阶。实际上,在对小规模数据进行排序时,n2的值实际比 knlogn+c还要小。