插入排序(Insertion Sort)是一种简单直观的排序算法。通过构建有序序列,对于未排序数据,在已排序序列中从后面向前扫描,找到相应位置并插入。插入排序在实现上,通常采用in place排序(即只需用到O(1)的额外空间的排序),因而在从后向前扫描过程中,需要反复把已排序元素逐步向后挪位,为最新元素插入空间。
算法描述:
1,从第一个元素开始,该元素可以认为已经被排序。
2,取出下一个元素,在已经排序的元素序列中从后向前扫描。
3,如果该元素(已排序)大于新元素,该元素移到下一位置。
4,重复步骤3,直到找到已排序的元素小于或等于新元素的位置。
5,将新元素插入到该位置。
6,重复步骤2~5。
动图演示:

代码实现:
public class Sort{ public static void printArr(int[] arr){ for(int i:arr){ System.out.print(i+" "); } } public static void insertionSort(int[] arr){ if(arr==null){ return; } int j,current; for(int i=0;i<arr.length-1;i++){ j=i+1; //目标元素的值 current=arr[j]; //j>0条件一定要放在前面,否则报错,下标超出数组范围 while(j>0&¤t<arr[j-1]){ //将比目标元素大的元素向后挪一位 arr[j]=arr[j-1]; j--; } arr[j]=current; } } public static void main(String[] args){ int[] arr=new int[]{3,44,38,5,47,15,36,26,27,2,46,4,19,50,48}; insertionSort(arr); printArr(arr); } }
posted on
浙公网安备 33010602011771号