撲克牌,相信不少人都玩過,咱們抓牌的時候,通常都是把抓上來的牌跟手上的牌比較,而後插到左邊或者右邊( 看你是從大到小,仍是從小到大 )。java
這就是插入排序。dom
package com.ghostwu; import java.util.Random; class MyInsertSort{ int maxSize; int[] arr; public MyInsertSort( int s ){ arr = new int[s]; Random rand = new Random(); for( int i = 0; i < arr.length; i++ ){ arr[i] = rand.nextInt( 101 ); } } public void sort(){ //從下標1開始,下標爲0就一個數,他就是有序的 for( int i = 1; i < arr.length; i++ ){ int tmp = arr[i]; int j = i; //從已經排好序的數 最右邊的開始比較,若是小,就把當前的值,繼續和他前面的比較 while( j > 0 && tmp < arr[j-1] ) { arr[j] = arr[j-1]; //日後移動 j--; } //開始插入 arr[j] = tmp; System.out.println( "第" + i + "輪,排序結果" ); printArray(); } } public void printArray(){ for( int i = 0; i < arr.length; i++ ){ System.out.print( arr[i] + "\t" ); } System.out.println(); } } public class InsertSort2 { public static void main(String[] args) { MyInsertSort s = new MyInsertSort( 10 ); System.out.println( "--------------排序前--------------" ); s.printArray(); s.sort(); System.out.println( "--------------排序後--------------" ); s.printArray(); } }
排序細節與結果:spa
--------------排序前-------------- 37 87 4 32 9 62 81 41 84 41 第1輪,排序結果 37 87 4 32 9 62 81 41 84 41 第2輪,排序結果 4 37 87 32 9 62 81 41 84 41 第3輪,排序結果 4 32 37 87 9 62 81 41 84 41 第4輪,排序結果 4 9 32 37 87 62 81 41 84 41 第5輪,排序結果 4 9 32 37 62 87 81 41 84 41 第6輪,排序結果 4 9 32 37 62 81 87 41 84 41 第7輪,排序結果 4 9 32 37 41 62 81 87 84 41 第8輪,排序結果 4 9 32 37 41 62 81 84 87 41 第9輪,排序結果 4 9 32 37 41 41 62 81 84 87 --------------排序後-------------- 4 9 32 37 41 41 62 81 84 87