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

歡迎訪問 生活随笔!

生活随笔

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

java

插入排序详解(Java)

發布時間:2023/12/20 java 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 插入排序详解(Java) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

插入排序的代碼實現雖然沒有冒泡排序和選擇排序那么簡單粗暴,但它的原理應該是最容易理解的了,因為只要打過撲克牌的人都應該能夠秒懂。插入排序是一種最簡單直觀的排序算法,它的工作原理是通過構建有序序列,對于未排序數據,在已排序序列中從后向前掃描,找到相應位置并插入。

插入排序和冒泡排序一樣,也有一種優化算法,叫做拆半插入。

1.算法步驟

  • 將第一待排序序列第一個元素看做一個有序序列,把第二個元素到最后一個元素當成是未排序序列。
  • 從頭到尾依次掃描未排序序列,將掃描到的每個元素插入有序序列的適當位置。(如果待插入的元素與有序序列中的某個元素相等,則將待插入元素插入到相等元素的后面。)
  • ?2.動圖演示

    3.詳細步驟?

    ?第一次排序:

    ?第二次排序:

    ?循環上述步驟,直到循環結束。

    4.代碼示例

    package test;/*** 全都給我寫代碼** @author jiangminghui* @date 2022/11/07 22:19**/ public class InserSort {public static void main(String[] args) {int[] ints = insertSort(new int[]{9, 2, 7, 5, 4, 0, 3, 1, 8});for (int anInt : ints) {System.out.print(anInt+" ");}}static int[] insertSort(int[] arr){for (int i = 1; i < arr.length; i++) {for (int j = i; j > 0; j--) {if(arr[j-1]>arr[j]){swap(arr,j,j-1);}}}return arr;}static void swap(int[] arr, int i, int j){int temp = arr[i];arr[i] = arr[j];arr[j] = temp;} }

    5.穩定性及時間復雜度

    在使用插入排序時,元素從無序部分移動到有序部分時,必須是不相等(大于或小于)時才會移動,相等時不處理,所以直接插入排序是穩定的。

    在插入排序中,當待排序序列是有序時,是最優的情況,只需當前數跟前一個數比較一下就可以了,這時一共需要比較n- 1次,時間復雜度為O(n)。
    ??最壞的情況是待排序數組是逆序的,此時需要比較次數最多,總次數記為:1+2+3+…+N-1,所以,插入排序最壞情況下的時間復雜度為O(n2)。
    ??平均來說,array[1…j-1]中的一半元素小于array[j],一半元素大于array[j]。插入排序在平均情況運行時間與最壞情況運行時間一樣,是O(n2)。

    總結

    以上是生活随笔為你收集整理的插入排序详解(Java)的全部內容,希望文章能夠幫你解決所遇到的問題。

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