分析:咱們考慮最壞的狀況,當數組徹底逆序的時候好比{6,5,4,3,2,1}這種狀況,咱們進行升序排序,咱們比較的次數:1+2+3+4+5,數據移動的次數:1+2+3+4+5。擴展到n個元素的數組 比較次數:1+2...+n-1 = n(n-1)/2,移動的次數一樣爲n(n-1)/2,所考慮數據隨機的狀況,時間複雜度爲(n^2 -n)/2 = O(n2)。從這裏能夠看出一樣的O(n2)時間複雜度,直接插入排序比選擇排序和冒泡排序性能要要一些。直接插入排序對數組基本有序和數組元素比較少的時候,速度比較快。java
代碼:
/* 用直接插入排序算法實現對數組元素升序排列 */ package edu.java.InsertSort; import java.util.Scanner; public class InsertSortTest { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.println("請輸入待排序列個數:"); int n = scanner.nextInt(); int[] array = new int[n + 1]; System.out.println("請輸入數組元素"); for (int i = 1; i <= n; i++) { array[i] = scanner.nextInt(); } insertSort(array,n); } public static void insertSort(int array[], int n) { //從第二個元素開始將無序區每一個元素與有序區元素比較;array[0]爲監視哨 for (int i = 2; i <= n; i++) { //若無序區第一個元素小於有序區最後一個元素 if (array[i] < array[i - 1]) { //將array[i]的值賦給監視哨 array[0] = array[i]; //從有序區後面開始與監視哨的值做比較 for (int j = i - 1; array[0] < array[j]; j--) { //元素後移 array[j+1] = array[j]; array[j] = array[0]; } } } System.out.println("----------------------"); System.out.println("排序完成,升序序列爲:"); for (int i = 1; i <= n ; i++) { System.out.println(array[i]); } } }
算法