寫在前面:
簡單插入排序法其實比較好理解,他的演算法過程類似於打撲克抓牌的過程。在我們抓到第一張牌之後,以後抓的每一張牌都會與之前手中的牌對比,對比之後,插入到合適的位置上,直到抓完最後一張牌。那麼在演算法實現中,也是同理,我們假設陣列索引為0的元素有序,從陣列索引為1的元素開始,將arr[1]與arr[0]對比,如果大於arr[1]>arr[0],則插入到arr[0]的後面,如果arr[1]
例如:陣列int arr = new int ,第乙個元素為2,預設就是有序的
第一次插入:插入元素5,比較後,插入到2的後面 -----[2,5] , 3, 1,6,8,4,7
第二次插入:插入元素3,比較後,插入到2的後面,5的前面-----[2,3 , 5] , 1,6,8,4, 7
第三次插入:插入元素1, 比較後,插入到2的前面 -----[1,2,3,5] ,6,8,4,7
第四次插入:插入元素6,比較後,插入到5的後面 -----[1,2,3,5,6] ,8,4,7
第五次插入:插入元素8,比較後,插入到6的後面 -----[1,2,3,5,6,8] ,4,7
第六次插入:插入元素4,比較後,插入到3的後面,5的前面-----[1,2,3,4,5,6,8] ,7
第七次插入:插入元素7,比較後,插入到6的後面,8的前面-----[1,2,3,4,5,6,7,8]
無論順序如何,都會經歷8-1次,這樣經過了n-1次插入,就完成了簡單插入排序。
**實現:
package test2;
/** * 簡單插入排序
* * @classname test2
* @description
* @author mcgrady
* @date 2023年3月8日
*/public class test2 ;
sort(arr);
for (int i : arr)
} public static void sort(int arr) else
}arr[j + 1] = temp;
} }}
通過上面的例項分析,我們可以看出,無論陣列的順序如何,最後都要執行插入,也就是賦值語句arr[j+1]=temp,所以執行了n-1次。
而陣列的移動次數則與陣列的初始順序有關。當陣列正序的時候,數字移動次數為0.而當陣列逆序的時候,交換次數(n-1)+(n-2)+......+1次,也就是=n*(n-1)/2次。
那麼,最好情況下:程式會執行(n-1)+0 次,時間複雜度為o(n).
那麼,最壞情況下:程式會執行(n-1)+n*(n-1)/2次,時間複雜度為o(n^2).
空間複雜度分析:
通過上面的例項分析,我們可以看出,簡單插入排序只是定義了乙個變數temp,空間複雜度為常量,即o(1)
Java排序演算法 插入排序
插入排序最簡單的排序方法之一。它是時間複雜度為o n 2 空間複雜度為o 1 的一種穩定排序演算法。基本思想 插入排序有n 1趟排序組成。假設在第p個位置的元素為待插入元素,對於p 1到p n 1趟,每一趟保證從位置到位置p的元素已經處於有序狀態。一開始預設a 0 為已排序陣列中的元素,從arr 1...
排序演算法3 插入排序
插入排序 insertion sort 通過對未排序的元素逐個插入已排序的合適的位置而完成排序工作,其排序流程如下 1.對陣列的前兩個元素進行排序。2.將第三個元素和前兩個已經排好序的元素進行比較,並且插入到合適的位置。3.和第二步同樣的方法對剩下的所有元素進行排序,最後便可得到按照從大到小的順序排...
排序演算法3 插入排序
該演算法維護乙個有序序列,然後把無序序列中的元素,在有序序列中從後往前進行掃瞄,找到位置後插入。從乙個元素開始,該元素可以認為已經被排序好的。在有序序列從後往前掃瞄的過程中,也要將已排序的元素逐個後移,為新插入的元素提供位置 插入排序 public class insertsort for int ...