排序算法-插入排序
1 插入排序
插入排序是一种简单直观的排序算法。
算法思路
把n个待排序的元素看成为一个有序表和一个无序表。开始时有序表中只包含1个元素,无序表中包含有n-1个元素,排序过程中每次从无序表中取出第一个元素,将它插入到有序表中的适当位置,使之成为新的有序表,重复n-1次可完成排序过程。
从小到大的插入排序整个过程如图示:例如初始数列{5,2,4,6,1,3}
第一轮:从第二位置的 2 开始比较,比前面 5 小,交换位置。
第二轮:第三位置的 4 比前一位置的 5小,交换位置,依次往前比较。
第三轮:第四位置的 6 比前一位置的 5大,无需交换位置。
第四轮:第五位置的 1 比前一位置的 6 小,交换位置,再依次往前比较。
第五轮:第六位置的 3 比前一位置的 6 小,交换位置,再依次往前比较。
代码
package com.hsp.baselearn.algorithm; /** * 插入排序 */ public class InsertSort { public static void main(String[] args) { int arr [] ={9,8,5,4,2,0}; insertSort(arr); } private static void insertSort(int[] arr) { if (arr == null && arr.length <= 1) return; for (int i = 1; i < arr.length; i++) { //趟数 for (int j = i;j>0;j--){ //交换位置 if(arr[j]<arr[j-1]){ swap(arr,j,j-1); }else{ break; } } } for (int i: arr) { System.out.print(i+"\t"); } } private static void swap(int[] arr,int i,int j){ int temp = arr [i]; arr[i]=arr[j]; arr[j]=temp; } }