Java插入排序法
阿新 • • 發佈:2019-01-27
本人學生黨一枚。Java學習過程,寫這個部落格純屬當複習,有什麼錯誤的地方請大家指出來在評論裡指點指點我。謝謝
概念:
插入排序法是插入式排序法的一種。
基本思想是:把n個待排序的元素看成一個有序表和無序表。一開始有序表只包含一個元素,無序表中包含n-1個元素。排序過程中每次從無序表中取出第一個元素,把它依次與有序表中的元素進行比較。然後把它插入到有序表的適當位置,形成新的有序表。
通俗的講:假設第一個元素是有序的,後面的元素往前插入,依次進行比較,小的往前挪,大的往後挪,找到合適的位置插入。打個形象的比方就是打撲克牌時的擺牌。
插入過程:
思路:
1:外層迴圈:因為第一個是有序的,所以不用參與插入,所以從arr[i] 開始。
2:設定插入的數由上面可得出 從 arr[i] 開始。
3:設定被插入數的下標,往前插所以是 i - 1。
4:內層迴圈:如果插入的數比被插入的數小,就要把被插入的數向後移,插入的數向前移 index–就退出了迴圈。
5:當不滿足迴圈條件後就找到了合適的位置插入。
程式碼:
package com.test_1;
import java.util.Calendar;
public class Demo5_3 {
public static void main(String[] args) {
//構建一個龐大的無序陣列用於測試時間
int len=10;
int arr1 [] = new int [len];
for(int i=0;i<len;i++){
//讓程式隨機產生一個1~10000的數
//Math.random()會產生一個0~1的數
int t = (int)(Math.random()*len);
arr1[i] = t;
}
//插入排序法
InsertSort iSort = new InsertSort();
iSort.sort(arr1);
}
}
class InsertSort
{
public void sort(int arr[])
{
for(int i =1; i<arr.length;i++)
{
//插入的數
int insertVal = arr[i];
//被插入的位置(準備和前一個數比較)
int index = i-1;
//如果插入的數比被插入的數小
while(index>=0&&insertVal<arr[index])
{
//將把arr[index] 向後移動
arr[index+1]=arr[index];
//讓index向前移動
index--;
}
//把插入的數放入合適位置
arr[index+1]=insertVal;
}
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + " ");
}
}
}
效率:
優於氣泡排序法,優於選擇排序法。低於快速排序法。詳情自己測試就好。