用Java实现直接插入排序
思想:假设你左手上有扑克牌,且从左往右是有序的(即已经按照牌的大小排好顺序)现在抓到一张牌,肯定是找个合适的位置插入到牌堆中,在插入时候,遵循原则:从右边的牌开始依次与要插入的那张牌的大小进行比较,若插入的牌小,手中的牌需要向右移动,重复比较插入手中牌堆中牌的大小,直到找到一张比插入的牌小的牌,故代码需要体现两点:
A、比较
B、牌堆中牌的移动,且是向右移动
package com.mifeng.acm.practice;
import java.util.Arrays;
import org.junit.Test;
/**
* 直接插入排序
* @author 21405
*
*/
public class InsertSortDemo {
public static void main(String[] args) {
// TODO Auto-generated method stub
}
@Test
public void test(){
//int[] array = new int[]{9, 7, 6, 4, 3, 1};
int[] array = new int[]{2, 4, 1, 6, 3, 5};
System.out.println("排序前:"+ Arrays.toString(array));
insertSort(array);
}
public void insertSort(int A[]){
for(int i = 1; i< A.length; i++){
int j = i-1;
int key = A[i];
while(j >= 0 && key < A[j]){
A[j+1] = A[j];
j = j - 1;
}
A[j+1] = key;
}
System.out.println(Arrays.toString(A));
}
}
代码分析:
1)里层循环表示与牌堆中的牌比较,若插入的牌小(条件只能是小于,所以直接插入排序为稳定的排序算法!!!),牌堆中的比插入的牌要大的牌都要右移
2)外层循环表示要插入的牌