/** * 演示插入法排序: * 它的基本工作原理是抽出牌,在前面的牌中寻找相应的位置插入,然后继续下一张 * * 例:有数组 n[]={2,6,7,9},用插入法排序,i>0,j>0,temp=n[i] * 外循环第一轮:i=1;j=1; 比较 n[j-1]=3 与 temp =6; temp > n[j-1] => 交换n[j]=n[j-1] => 6279;j=0,break跳出,进入第二轮 * 外循环第二轮:i=2;j=2;内循环第一轮:=>6729 * 内循环第二轮:=>7629 * 外循环第三轮:i=3;j=3;内循环第一轮:=>7692 * 内循环第二轮:=>7962 * 内循环第三轮:=>9762 <=> 排序完毕 时间复杂度为O(N)=O(4) */ package sort; /** * @author 杨忠盛 * @version 1.0 ,2007-3-21 * 下午04:22:21 */ public class InsertSort { /**创建一新数组*/ private static int[] numArray = {5,12,2,63,22,6,54,42}; /**计算新数组的长度*/ private static int count = numArray.length; /** * 构造方法 */ protected InsertSort(){ } /** * 程序的唯一入口 main 方法 * @param args */ public static void main(String[] args) { System.out.print("插入法排序结果(从大到小排序):/t"); /**排序数组*/ for(int i=1;i<count;i++){ int iTemp = numArray[i];//抽出第i个数,然后再在剩下的数中通过比较,选择插入的位置 int j = i; for(;(j > 0) && (iTemp >= numArray[j-1]);j--){ numArray[j] = numArray[j-1]; } numArray[j] = iTemp;//保持 iTemp 与 numArray[j] 一直指向同一个数 } /**输出*/ for(int i=0;i<count;i++){ System.out.print(numArray[i] + "/t"); } } }
|