日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

Java插入排序(思路及实现)

發布時間:2023/12/20 java 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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插入排序(思路及实现)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。