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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

算法六之直接插入排序

發(fā)布時(shí)間:2023/12/3 编程问答 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 算法六之直接插入排序 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
一、直接插入排序基本思想 直接插入排序(straight insertion sort)的做法是: 每次從無序表中取出第一個(gè)元素,把它插入到有序表的合適位置,使有序表仍然有序。 第一趟比較前兩個(gè)數(shù),然后把第二個(gè)數(shù)按大小插入到有序表中; 第二趟把第三個(gè)數(shù)據(jù)與前兩個(gè)數(shù)從后向前掃描,把第三個(gè)數(shù)按大小插入到有序表中;依次進(jìn)行下去,進(jìn)行了(n-1)趟掃描以后就完成了整個(gè)排序過程。 直接插入排序是由兩層嵌套循環(huán)組成的。外層循環(huán)標(biāo)識(shí)并決定待比較的數(shù)值內(nèi)層循環(huán)為待比較數(shù)值確定其最終位置。直接插入排序是將待比較的數(shù)值與它的前一個(gè)數(shù)值進(jìn)行比較,所以外層循環(huán)是從第二個(gè)數(shù)值開始的。當(dāng)前一數(shù)值比待比較數(shù)值大的情況下繼續(xù)循環(huán)比較,直到找到比待比較數(shù)值小的并將待比較數(shù)值置入其后一位置,結(jié)束該次循環(huán)。

二、算法實(shí)現(xiàn)

public static void insertSort(int[] data) {
int temp; //臨時(shí)空間,保存要插入的數(shù)據(jù)int j; //臨時(shí)空間,保存當(dāng)前移動(dòng)數(shù)據(jù)的下標(biāo)//從1開始,第一個(gè)元素是有序的for (int i = 1; i < data.length; i++) {//比較插入的數(shù)據(jù)與有序隊(duì)列最后一個(gè)數(shù)據(jù)的大小關(guān)系if (data[i - 1] > data[i]) { temp = data[i]; //保存插入的數(shù)據(jù)data[i] = data[i - 1]; //將有序隊(duì)列的最后一個(gè)數(shù)據(jù)移動(dòng)到插入數(shù)據(jù)的位置//從有序隊(duì)列的倒數(shù)第二個(gè)數(shù)據(jù)開始比較for (j = i - 2; j >= 0 && data[j] > temp; j--) {data[j+1] = data[j]; //這些數(shù)據(jù)大于插入數(shù)據(jù),往后移動(dòng)一個(gè)位置 }data[j+1]=temp; //回填要插入的數(shù)據(jù) }}}

?

?三、算法復(fù)雜度

? 最好時(shí)間O(n),最壞時(shí)間O(n2),平均時(shí)間O(n2),輔助存儲(chǔ)O(1),穩(wěn)定,大部分已有序時(shí)比較好。

?

總結(jié)

以上是生活随笔為你收集整理的算法六之直接插入排序的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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