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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

8.3 直接插入排序

發(fā)布時間:2025/3/16 编程问答 18 豆豆
生活随笔 收集整理的這篇文章主要介紹了 8.3 直接插入排序 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

就如同拿到一摞亂撲克牌時候要在手里將順序整理好一樣,直接插入排序(Straight Insertion Sort)的基本操作是將一個記錄插入到已經(jīng)排好序的有序表中,從而得到一個新的、記錄數(shù)增1的有序表。

復(fù)雜度分析:

從空間來看,它需要一個記錄的輔助空間O(n)(其實不需要也可以,直接在原數(shù)組中進(jìn)行滑動操作,將目前要執(zhí)行的元素current向前滑動到它對應(yīng)的位置,此時不需要額外空間即O(1)),因此關(guān)鍵是看它的時間復(fù)雜度。當(dāng)最好的情況,也就是要排序的表本身就是有序的,我們就相當(dāng)于遍歷了一遍數(shù)組,只是執(zhí)行了大循環(huán),內(nèi)部小循環(huán)一直都未進(jìn)行,而如果是最壞的情況,即排序表示逆序的,此時需要比較的次數(shù)就是 n * (n + 1)/2,需要移動的次數(shù)也是這些。如果排序記錄是隨機的,那么根據(jù)概率性相同的原則,平均比較和移動的次數(shù)約為 n * n / 4次。因此我們得出直接插入排序法的時間復(fù)雜度為O(n*n)。從這里可以看出,同樣的O(n*n)的時間復(fù)雜度,直接插入排序法比冒泡法和簡單選擇排序法的性能要好一些。

下面看一下用php實現(xiàn)的該算法:

<?php header("content-type:text/html;charset=utf-8"); /** 插入法排序:* 每一個位置的值向前滑動,挨個與它之前的值進(jìn)行比較,插到合適的位置* 時間復(fù)雜度:與數(shù)據(jù)情況有關(guān)* 最好的情況:O(N);* 最差的情況:O(N^2)* 額外空間復(fù)雜度O(1)* */function insertSort($arr){if($arr == null || count($arr)<2){return true;}for($current=1;$current<count($arr);$current++){ //current為目前要進(jìn)行插入操作的數(shù)字,0位置不需要再插入了,所以從1開始for($i = $current;$i>0 && $arr[$i-1]>$arr[$i];$i--){ //i>0保證往前滑比較的時候不越界,$arr[$i-1]>$arr[$i] 表示要進(jìn)行插入操作的數(shù)字i與它前面的那個數(shù)進(jìn)行比較,//如果比它小就往前滑,所以執(zhí)行i--,繼續(xù)和它前一個數(shù)比較,直到插進(jìn)適合它的位置swap($arr,$i-1,$i);}}return $arr; }function swap(&$arr,$i,$j){ //注意這里引用變量的使用$tem = $arr[$i];$arr[$i] = $arr[$j];$arr[$j] = $tem; }$arr = [2,33,45,22,64,67,12,1,0,9]; $array = insertSort($arr); print_r($array);//結(jié)果:Array ( [0] => 0 [1] => 1 [2] => 2 [3] => 9 [4] => 12 [5] => 22 [6] => 33 [7] => 45 [8] => 64 [9] => 67 )

?

轉(zhuǎn)載于:https://www.cnblogs.com/xlzfdddd/p/10475495.html

總結(jié)

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

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