Java插入排序(思路及实现)
Java數組排序——插入排序(Insertion Sort)思路及實現
1、概念及其介紹:
? 插入排序(InsertionSort),一般也被稱為直接插入排序。對于少量元素的排序,他是一個有效的算法。
2、思路:
? 它的基本思路是將一個記錄插入到已經排序好的有序表中,從而得到一個新的、記錄增加1的有序表。在實現過程中使用雙層循環,外層循環對除了第一個元素之外的所有元素,內層循環對當前元素前面有序表進行待插入位置查找,進行移動。
3、適用說明:
? 插入排序的平均時間復雜度是O(n^2),空間復雜度為常數階O(1),具體時間復雜度和數組的有序性也是有關聯的。
插入排序中,當待排序數組是有序時,是最優的情況,只需當前跟前一個數比較一下就可以了,這是一共需要比較n-1次,時間復雜度為O(n)。最壞的情況是待排序數組是逆序的,此時需要比次數最多,最壞的情況是O(n^2)。
4、過程圖示:
? 假設前面n-1(其中n>=2)個數是已經排好順序的,現將第n個數插到前面已經排好的序列中,然后找到合適自己的位置,使得插入的第n個數的新序列也是排好順序的。排序的過程如圖所示:
以數組int[] numbers = {5,3,2,6,4}; 為例:
**第一輪:**將第2個元素3作為臨時元素,也就是待插入元素,將臨時元素3與前一個元素5做比較,如果臨時元素3小于前一個元素5,則前一個元素5向后移動一位,臨時元素3插入此前5的位置。
**第二輪:**將第3個元素2作為臨時元素,先將2與5做比較,2小于5,將5向后移動一位,再將2與3做比較,2小于3,將3向后移動一位,最后將2插入到3之前的位置。
**第三輪:**將第四個元素6作為臨時元素,將6與5做比較,6大于5,將6插入到當前自己所在的位置。
**第四輪:**將第五個元素4作為臨時元素,將4與6做比較,4小于6,將6向后移動一位,在將4與5做比較,4小于5,將5向后移動一位,再將4與3做比較,4大于3,將4插入3后面的位置。完成排序。
5、代碼實現:
/*** @Author: LiuHao* @Date: 2021/10/19 20:23* 插入排序2*/ public class InsertSort2 {public static void main(String[] args) {int[] numbers = {5,3,2,6,4};System.out.println("排序前的結果為:" + Arrays.toString(numbers));for (int i = 1; i < numbers.length; i++) { //控制循環輪數int temp = numbers[i]; //定義待交換元素int j; //定義待插入的位置for (j = i; j > 0 && temp < numbers[j - 1]; j --) {numbers[j] = numbers[j - 1];}numbers[j] = temp;System.out.println("第" + i + "輪的排序結果為:" + Arrays.toString(numbers));}System.out.println("排序后的結果為:" + Arrays.toString(numbers));} }6、運行結果:
排序前的結果為:[5, 3, 2, 6, 4]
第1輪的排序結果為:[3, 5, 2, 6, 4]
第2輪的排序結果為:[2, 3, 5, 6, 4]
第3輪的排序結果為:[2, 3, 5, 6, 4]
第4輪的排序結果為:[2, 3, 4, 5, 6]
排序后的結果為:[2, 3, 4, 5, 6]
總結
以上是生活随笔為你收集整理的Java插入排序(思路及实现)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Android培训班
- 下一篇: 1658页!又一份神级的Java手册面世