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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java数组的插入排序以及时间复杂度

發(fā)布時(shí)間:2023/12/20 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java数组的插入排序以及时间复杂度 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

插入排序的思想是把前面的排好依次往下進(jìn)行遍歷,發(fā)現(xiàn)比最后一個(gè)數(shù)小的把它插入排好序的最后一個(gè)數(shù)的前面,此時(shí)排好的數(shù)組可能已經(jīng)不再有序,就對(duì)它進(jìn)行維護(hù),以此重復(fù)上述操作

具體步驟:定義一個(gè)指針i,再定義一個(gè)指針j,i最開始指向數(shù)組的第二個(gè)數(shù),j指向i的前一個(gè)數(shù),然后讓j和他后面的數(shù)進(jìn)行比較,如果后面的數(shù)比j小就讓他倆交換(如果不交換說明前面已經(jīng)排好序),然后再讓指針j指到j(luò)的前一個(gè)數(shù),在讓j和j后面的數(shù)進(jìn)行比較如果比j指針指向的數(shù)大就再進(jìn)行交換,以此循環(huán)直到j(luò)后面的數(shù)比j大或j指向數(shù)組的第一個(gè)數(shù),就讓指針i指向下一個(gè)數(shù),以此循環(huán)直到i指向數(shù)組最后一個(gè)數(shù)。排序完成。

數(shù)組按插入排序全過程如下圖:

?

?

?

?

?

插入排序代碼如下:

public class Insertsort {public static void main(String[] args) {//定義無序數(shù)組int[] arr= {23,43,1,22,67,123,88,99,90,15};sort(arr);}private static void sort(int[] arr) {//第一次for循環(huán),即對(duì)每個(gè)數(shù)都進(jìn)行遍歷,i就是上面所說的i指針for(int i=1;i<arr.length;i++) {//第二次for循環(huán),每次j開始都是i的前一個(gè)數(shù),然后向前走以維護(hù)前面已排好序的數(shù)組即j--for(int j=i-1;j>=0;j--) {//判斷如果j比后面數(shù)大就進(jìn)行交換,然后j--進(jìn)行維護(hù)if(arr[j]>arr[j+1]) {arr[j]^=arr[j+1];arr[j+1]^=arr[j];arr[j]^=arr[j+1];}else{//j比后面數(shù)小此層for循環(huán)結(jié)束,因?yàn)闆]必要繼續(xù)遍歷以減小時(shí)間頻率,break;}} }System.out.println(Arrays.toString(arr)); }}

結(jié)果如下:

?時(shí)間復(fù)雜度:外層for循環(huán)時(shí)間復(fù)雜度是O(n)最壞情況里層需要每次遍歷到數(shù)組的第一個(gè)數(shù)即里層時(shí)間復(fù)雜度是O(n),所以最壞情況下插入排序的時(shí)間復(fù)雜度是o(n^2)

這也是插入排序的弊端所以產(chǎn)生一個(gè)希爾排序來降低它的時(shí)間復(fù)雜度。

總結(jié)

以上是生活随笔為你收集整理的java数组的插入排序以及时间复杂度的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。