package com.algo; /**插入排序 * 要点: * 1.和冒泡和选择排序不同,插入排序必须是局部有序的 * 2.具体思路首先腾空临界的那一个数据(即第一个无序数据),然后将原来的有序数据队列前移,将腾空后的数据插入队列中 * 3.插到哪里呢?就要首先要当前临界的无序数据与左边相邻的数据比较,如果小于当前相邻的数据,则互换位置, * 直到大于左边的那个数据,那么就插入到这个数据的前面 * 4.如:数据:2,5,8,7,6,3 * 从思路上分析:第一次:让7和8比较, 7<8并且原来8的数都小于7时在8左边插入,7>5>2 排序结果为:2,5,7,8,6,3 * 第二次 让6与8比较:6<8 并且原来的8的数都小于6时在8的左端插入。显然7>6 那么 7和6互换位置 最后排序结果:2,5,6,7,8,3 * 第三次 3与8比较:3<8并且对比了8前面所有的数后 应插到5的左端,故最后排序结果:2,3,5,6,7,8 * 效率:当数据基本有序时,while迭代的条件基本是假的,我们可以看到的时间最短为O(N),在这种情况下,插入排序比冒泡要快。但对于逆序 * 来说,每次的比较和移动都要执行,这样的话就不比冒泡要快 */ public class InsertSortTest { public static void main(String[] args) { int ram[]={2,5,8,7,6,3}; //默认为第一个数值即2是有序的 for(int i=1;i<ram.length;i++){ int temp=ram[i]; int j=i; while(j>=0&&ram[j-1]>=temp){ ram[j]=ram[j-1]; --j; } ram[j]=temp; } for(int i:ram){ System.out.print(i+" "); } } }