插入排序簡述
插入排序的基本操作就是將一個數據插入到已經排好序的有序數據中,從而得到一個新的、個數加一的有序數據。
第一個元素是有序隊列,從第二個元素開始向有序隊列中插入,插入完成后將第三個元素向有序隊列中插入,依次進行,直到將最后一個元素插入完畢。
在將元素插入到有序隊列中,要將這個元素與有序隊列的元素依次比較,如果小於有序隊列的某個元素,將其插入到該元素的前面,否則不做操作。依次比較完畢,沒有比其大的,就將其放在有序隊列的末尾。
圖例介紹:
代碼:
插入排序類
package com.dxx.order; public class InsertSort { private int arrs[]; public InsertSort(int[] arrs) { super(); this.arrs = arrs; } public void sortArrs(){ int len = arrs.length; int temp = 0; //進行len-1次循環,每次循環都將下標為i的元素插入到它前面已經排好序的隊列中 for(int i=1;i<len;i++){ //進行i次循環,每次循環都將下標為i的元素與下標為j的元素比較,找到比它小的元素,然后插入到那個元素前面,如果一直沒有比它小的元素,就不做操作 for(int j=0;j<i;j++){ if(arrs[j]>arrs[i]){ temp = arrs[i]; for(int k = i;k>j;k--){ arrs[i] = arrs[i-1]; } arrs[j] = temp; }
//另一種插入算法
public void sortArrs2(){ int len = arrs.length; int temp = 0; //進行len-1次循環,每次循環都將下標為i的元素插入到它前面已經排好序的隊列中 for(int i=1;i<len;i++){ if(arrs[i]<arrs[i-1]){ temp = arrs[i]; while( i>0 && temp<arrs[i-1]){ arrs[i]=arrs[i-1]; i--; } arrs[i] = temp; } } }
} } }
public void printArrs(){ for(int i :arrs){ System.out.print(i + " "); } System.out.println(); } }
主程序類:
package com.dxx.order; public class MainTest { public static void main(String[] args) { int arrs[] = {1,3,2,5,4,8,6,7}; InsertSort insertSort = new InsertSort(arrs); insertSort.printArrs(); insertSort.sortArrs(); insertSort.printArrs(); } }