插入排序的基本思想是:每步將乙個待排序的物件,按其關鍵字大小,插入到前面已經排好序的一組物件的適當位置上,直到物件全部插入為止。
簡言之,邊插入邊排序,保證子串行中隨時都是排好序的。
新元素插入到**?在已形成的有序表中線性查詢,並在適當位置插入,把原來位置上的元素向後順移。
關鍵字序列t=(13,6,3,31,9,27,5,11),請寫出直接插入排序的中間過程序列。
關鍵字序列t= (21,25,49,25*,16,08),請寫出直接插入排序的具體實現過程。*表示後乙個25
假設該序列已存入一維陣列v[7]中,將v[0]作為緩衝或暫存單元(temp)。則程式執行過程為:
void insertsort (sqlist &l) ——教材p265
} // insertsort
<?php
function
insert_sort
($arr) else }}
//將這個元素 插入到已經排序好的序列內。
//返回
return
$arr;
}$arr = array(21,25,49,25,16,8);
$arr = insert_sort($arr);
print_r($arr);
在已形成的有序表中折半查詢,並在適當位置插入,把原來位置上的元素向後順移。
void binsertsort (sqlist &l) // 折半插入排序
// while
for (j=i-1;j>=high+1;--j) l.r [j+1] = l.r [j];// 記錄後移
l.r [high+1] = l.r [0]; // 插入
} // for
} // binsertsort
基本思想:先將整個待排記錄序列分割成若干子串行,分別進行直接插入排序,待整個序列中的記錄「基本有序」時,再對全體記錄進行一次直接插入排序。
技巧:子串行的構成不是簡單地「逐段分割」,而是將相隔某個增量dk的記錄組成乙個子串行,讓增量dk逐趟縮短(例如依次取5,3,1),直到dk=1為止。
優點:讓關鍵字值小的元素能很快前移,且序列若基本有序時,再用直接插入排序處理,時間效率會高很多。
演算法分析:開始時dk 的值較大,子串行中的物件較少,排序速度較快;隨著排序進展,dk 值逐漸變小,子串行中物件個數逐漸變多,由於前面工作的基礎,大多數物件已基本有序,所以排序速度仍然很快。
//希爾排序(對直接插入排序的改進)
function
shellsort
(array &$arr)
//插入
$arr[$j + $inc] = $temp;
}//增量為1時停止迴圈
} while ($inc > 1);
}$arr = array(49,38,65,97,76,13,27,49,55,4);
shellsort($arr);
var_dump($arr);
資料結構 插入排序
演算法中經常會用到各種各樣的演算法,比較簡答的思想就是氣泡排序,一般剛開始程式設計時遇到排序問題時,會很容易想到冒泡排,氣泡排序是通過兩輛比較數值,從而將數字移動到開始或者末尾的位置,反覆重複這個過程從而就達到了排序的目的。其時間複雜度大概是 n2 還有一種比較常用的插入排序,其思想與氣泡排序比較類...
資料結構 插入排序
一 直接插入排序 1 直接插入排序的演算法思想 r i 的鍵值ki與r 0 r i 1 的鍵值依次比較 從後往前比 找到r i 應插入的位置,並把從該位置開始的記錄後移乙個位置,把r i 插入到找到的插入位置,完成一趟直接排序 重複選r i 1 r n 完成上述操作,直到排序完畢 注 為什麼要從後往...
資料結構 插入排序
基本概念 排序 使記錄按關鍵字遞增或遞減排列 關鍵字重複不影響記錄順序的排序稱為穩定排序 影響記錄順序的稱為不穩定排序。僅在記憶體中進行的排序稱為內部排序 涉及內外存交換的排序稱為外部排序。內部排序 插入排序 選擇排序 交換排序 歸併排序 分配排序。排序演算法的步驟 1 比較兩個關鍵字大小 2 改變...