資料結構 插入排序

2021-07-27 20:33:08 字數 2116 閱讀 3663

插入排序的基本思想是:每步將乙個待排序的物件,按其關鍵字大小,插入到前面已經排好序的一組物件的適當位置上,直到物件全部插入為止。

簡言之,邊插入邊排序,保證子串行中隨時都是排好序的。

新元素插入到**?在已形成的有序表中線性查詢,並在適當位置插入,把原來位置上的元素向後順移。

關鍵字序列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 改變...