1. 程式人生 > >資料結構之折半插入排序圖文詳解及程式碼(C++實現)

資料結構之折半插入排序圖文詳解及程式碼(C++實現)

問題:

對待排序的陣列r[1..n]中的元素進行直接插入排序,得到一個有序的(從小到大)的陣列r[1..n]。

演算法思想:

1、設待排序的記錄存放在陣列r[1..n]中,r[1]是一個有序序列。

2、迴圈n-1次,每次使用折半查詢法,查詢r[i](i=2,..,n)在已排好的序列r[1..i-1]中的插入位置,然後將r[i]插入表長為i-1的序列r[1..i-1],直到將r[n]插入表長為n-1的有序序列r[1..n-1],最後得到一個表長為n的有序序列。

圖解:


程式碼:


執行結果:


相關推薦

資料結構折半插入排序圖文程式碼C++實現

問題:對待排序的陣列r[1..n]中的元素進行直接插入排序,得到一個有序的(從小到大)的陣列r[1..n]。演算法思想:1、設待排序的記錄存放在陣列r[1..n]中,r[1]是一個有序序列。2、迴圈n-1次,每次使用折半查詢法,查詢r[i](i=2,..,n)在已排好的序列r

資料結構直接插入排序折半插入排序、希爾排序演算法

哪個成功的人不是一路坎坷過來的,只有這樣你才知道珍惜,知道成功的不易。有時候太容易得到的東西反而不知道珍惜。 直接插入排序: 我們的記錄本身就是基本有序的,我們只需要少量的插入操作,就可以完成整個記錄集的排序工作,此時直接插入很高效。還有就是記錄數比較少時,直接插入的優勢

資料結構樹表的查詢】二叉排序程式碼生成、插入、查詢、最大值、最小值、刪除、中序遍歷、銷燬

二叉排序樹(簡稱BST)又稱二叉查詢(搜尋)樹,其定義為:二叉排序樹或者是空樹,或者是滿足如下性質的二叉樹:       (1)若它的左子樹非空,則左子樹上所有記錄的值均小於根記錄的值;       (2)若它的右子樹非空,則右子樹上所有記錄的值均大於根記錄的值;     

C#資料結構單鏈表(LinkList)例項

本文例項講述了C#資料結構之單鏈表(LinkList)實現方法。分享給大家供大家參考,具體如下: 這裡我們來看下“單鏈表(LinkList)”。在上一篇《C#資料結構之順序表(SeqList)例項詳解》的最後,我們指出了:順序表要求開闢一組連續的記憶體空間,而且插入/刪除元素時,為了保證元素的順序

經典排序演算法4——折半插入排序演算法

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

java資料結構:ArrayList與LinkedList

前篇博文講到了Java底層怎麼知道ArrayList和LinkedList哪個是隨機訪問哪個是順序訪問的,本片博文主要介紹各自的資料特點。 ArrayList: 從他的這個建構函式我們可以知道他的底層實現就是一個Object物件陣列。 第二個建構函式構造一個空的

資料結構與演算法』棧:程式碼實現

> 微信搜尋:碼農StayUp > 主頁地址:[https://gozhuyinglong.github.io](https://gozhuyinglong.github.io/) > 原始碼分享:[https://github.com/gozhuyinglong/blog-demos](h

資料結構圖文解析:二叉堆C++模板實現

0. 資料結構圖文解析系列 1. 二叉堆的定義 二叉堆是一種特殊的堆,二叉堆是完全二叉樹或近似完全二叉樹。二叉堆滿足堆特性:父節點的鍵值總是保持固定的序關係於任何一個子節點的鍵值,且每個節點的左子樹和右子樹都是一個二叉堆。 當父節點的鍵值總是大於或等於任何一個子節點的鍵值時為最大堆。 當父節點的鍵值總是小於

內部排序3——插入排序折半插入排序

復雜 span oid pre 時間 查找 insert -1 順序 因為插入排序的基本思想是在一個有序序列中插入一個新的記錄,則能夠利用"折半查找"查詢插入位置,由此得到的插入排序算法為"折半插入排序"。算法例如以下: void BInsertSort ()  {

資料結構——排序與查詢5——折半查詢C++實現

順序查詢 順序查詢,是一種最直觀的查詢方式。原理閒蕩簡單就是我們正常思維的查詢,從給定的序列出發,依次檢查序列中的每一個專案是否為我們給定的關鍵字。是則查詢成功,否則查詢失敗。 bool searchByOrder(vecter<int> vec){ for(int

資料結構拓撲排序和關鍵路徑

拓撲排序 在一個表示工程的有向圖中,用頂點表示活動,用弧表示活動之間的優先關係,這樣的有向圖為頂點表示活動的網,稱為AOV網。 基本思路:從AOV網中選擇一個入度為0的頂點輸出,然後刪去此頂點,並刪除以此頂點為尾的弧,繼續重複此步驟,直到輸出全部頂點或者AOV網中不存在入度為0的頂

資料結構】直接插入排序

概念:       直接插入排序是一種簡單的插入排序法,其基本思想是:把待排序的記錄按其關鍵碼值的大小逐個插入到一個已經排好序的有序序列中,直到所有的記錄插入完為止,得到一一個新的有序序列。 核心思想:     &nb

java資料結構折半查詢

折半查詢,也稱二分法查詢、二分搜尋,是一種在有序陣列中查詢某一特定元素的搜尋演算法,這裡強調有序表明這種演算法的特定使用場景; 搜素過程為,從陣列中間元素開始,如果中間元素正好是要查詢的元素,則搜素過程結束; 如果某一特定元素大於或者小於中間元素,則在陣列大於或小於中間元素的那一半中

插入排序演算法折半插入排序演算法

之前有學過二分查詢,其實折半插入跟二分查詢都是同一個原理。在百度百科開了折半排序演算法的原理後,自己試著根據原理寫出了版本一的演算法,版本二是參照巨人的實現思想,版本二才是重點。版本一可以忽略不看。 演算法同樣的目的是尋找正確的插入點。 版本一: 實現思想: 第一步:獲取折半後的下標

java版資料結構與演算法—插入排序

/** * 插入排序:時間複雜度O(n^2),但比氣泡排序,選擇排序要好 * 把下標為1的先取出來,當做臨時變數,下標為0的元素相當於排好序的 * 然後把下標為1的元素與下標為0的元素比較(升序),如果臨時變數比下標為0 * 的元素小,則下標為0的元素向後移動一個下標,臨時變數插到下

java資料結構二叉排序

binary sort tree / binary search tree 性質: 1.若左子樹不為空,則左子樹上所有節點的值均小於它的根節點的值。 2.若右子樹不為空,則右子樹上所有節點的值均大於它的根節點的值。 3.左右子樹也是二叉排序樹。 4.沒有值相同的節點

資料結構二叉排序

上一節我們介紹了二分(折半)查詢,也瞭解了它的優缺點。 二分查詢的特點:二分查詢能夠提高有序表中資料元素的查詢速度;二分查詢的時間複雜度為O(log2n);二分查詢是一種靜態查詢二分查詢的不足:當查詢表經常變化時,二分查詢的整體效能急劇下降。 二分查詢的硬傷:二分查詢基於有序表。

資料結構】直接插入排序、詳細解釋希爾排序、直接選擇排序、選擇排序

一、直接插入排序 將一個數組進行直接插入排序,每次取陣列中一個數A儲存起來,和此數下標之前已經排好的陣列進行比較(第一次因為前面沒有數,直接取陣列第二個數),假設需要升序數列,如果A數小於要比較的數,就繼續往陣列中更小下標的數比較(在這個過程中因為A數已經儲存起

資料結構和演算法 | 插入排序演算法原理實現和優化

插入排序演算法是所有排序方法中最簡單的一種演算法,其主要的實現思想是將資料按照一定的順序一個一個的插入到有序的表中,最終得到的序列就是已經排序好的資料。 直接插入排序是插入排序演算法中的一種,採用的方法是:在新增新的記錄時,使用順序查詢的方式找到其要插入的位置,

Java版資料結構二叉排序

簡介 新增結點 查詢結點 刪除結點 程式碼實現 public class MyBinarySortTree { int data;//結點權值 MyBinarySortTree leftTree;//左子樹 MyBinarySort