1. 程式人生 > >內部排序之插入排序(InsertSort)

內部排序之插入排序(InsertSort)

一、基本思想

直接插入排序(最壞時間O(n*n))是將一個數據插入到已經排序好的列表中。假設列表已經從小到大排列好,此時又有個新資料插入,可以從列表尾部開始向前遍歷,與新資料比較。如果新資料比當前遍歷資料小時停止遍歷,將新資料插入。

二、核心演算法

這裡寫圖片描述

三、事例

這裡寫圖片描述

四、折半插入

由於直接插入排序,新資料是插入一個已經排序好的序列。所以在查詢插入位置過程中其實就是對一個排序序列進行查詢。我們可以採用折半查詢來實現。
這裡寫圖片描述

五、2-路插入

2-路插入是在折半插入上更一步改進,目的減少排序過程中的移動記錄次數。此處思想有點像快速排序,指定箇中值數將大於這個中值數的數放在一邊,將小於這個中值數的數放在一邊。從而減少比較次數。不過此演算法需要消耗n個輔助空間,而且如果中值選的太大或者太小都會失去其優越性。
這裡寫圖片描述

六、表插入

表插入用修改次指標來避免資料的移動,但是仍然需要比較資料。由於資料表是鏈式結構,為了能夠應用於折半查詢,所以需要重新排序。
這裡寫圖片描述

七、例題

相關推薦

內部排序插入排序InsertSort

一、基本思想 直接插入排序(最壞時間O(n*n))是將一個數據插入到已經排序好的列表中。假設列表已經從小到大排列好,此時又有個新資料插入,可以從列表尾部開始向前遍歷,與新資料比較。如果新資料比當前遍歷資料小時停止遍歷,將新資料插入。 二、核心演算

排序快排JS

index 而後 想是 其中 baidu lan tmp urn 部分 快速排序(Quicksort)是對冒泡排序的一種改進。   它的基本思想是:通過一趟排序將要排序的數據分割成獨立的兩部分,其中一部分的所有數據都比另外一部分的所有數據都要小,然後再按此方法對這兩部分數

六 簡單排序插入排序

++ .com pub clas amp 排序 bubuko 變量 image 原理 : 源代碼: public class insertSort { public static void sort(int[] array) //插入

排序插入排序:直接插入和希爾排序

insert void shel body 位置 由於 temp 不同 bsp 一、插入排序 1、思想:原理類似抓撲克牌,在有序表中進行插入和查找,插入合適的位置時,之後的元素需要往後移動 2、時間復雜度: 最好:O(N),正序情況,只有比較時間,無移動時間 最壞:O(N2

排序插入排序

內排序之插入排序 插入排序即每次從陣列內拿出一個數與陣列前面的數進行比較,若比前面的數小prior函式返回true,進行執行swap函式,直至前面的數比它大為止! 插入排序的時間複雜度為O(n^2) 需要進行O(n^2)次交換 template<typename E>

常見排序插入排序

插入排序 排序思想 直接插入排序就是把待排序的記錄按關鍵字的大小逐個插入到一個已經排好序的有序序列中,直到所有記錄插入完為止。 我們可以假設序列第一個元素是已經排好序的,要插入第i(i>=1)個元素,可以將array[i]與排好序的每個元素相比較,知道找到一個比array

NOIP-C++大神培養計劃Step1.2.2——排序插入排序

上一節課呢,我們學習了氣泡排序,今天我們就來學學插入排序。 先看一個圖 很顯然,我們要選出一個數,並找到他的位置,就像圖中的一樣。 有過一定生活經驗的人會發現,這句就是打牌時的理牌嘛! 我們首先要用O(n)的時間來列舉每一個點,再用O(n)的時間查它之前在序列中的應有位置,所以,總

資料結構--排序插入排序

插入排序分類: 一般有直接插入、折半插入、希爾排序三種。 三種插入排序的基本思想大致相同 給定一個序列a[1...n] 前兩種將一個序列分成有序部分(sorted)和無需部分(unsorted), 迴圈遍歷序列a, 當遍歷到第r個下標時, 區間 [1,r-1] 是有序部分,區間[r,

php四大排序插入排序

插入排序法  插入排序法思路:將要排序的元素插入到已經 假定排序號的陣列的指定位置。  程式碼: function insert_sort($arr) {     //區分 哪部分是已經排序好的     //哪部分是沒有排序的     //找到其中一個需要排序的元素   

Java 排序插入排序、希爾排序

今天學習了一下 Java 陣列的相關操作,包含排序和查詢,現在先將排序記錄鞏固一下。 常用並且比較重要的幾種排序:插入排序、希爾排序、快速排序、歸併排序、氣泡排序、選擇排序。 一、插入排序 1. 插入排序演算法思想 1) 普遍思想 插入排序的演算法是一種簡單直

JDBC 插入Blob圖片& 批處理 & 資料庫事務

插入Blob欄位型別(如圖片) 實現批處理和 資料庫事務的一致性 一、插入Blob型別資料(如:圖片) 使用JDBC來寫入Blob型資料到資料庫中 資料庫中的Blob欄位比long欄位的效能要好,可以用來儲存如圖片之類的二進位制資料。 BLOB欄位由

排序-----插入排序於希爾排序

插入排序 插入排序基本思想:每一步將一個元素的排序碼按照大小,插入到前面已經排好序的元素之中的合適位置,直到最後一個元素也插入了他之前的有序序列。 直接插入排序 將array[i] 插到已經有序的array[0] array[i] ….. array[i

排序演算法直接插入InsertSort

編寫語言C#    直接插入演算法與打撲克的擺牌差不多,隨便拿到一張牌,你手上的牌是已由小到大排好的,你要做的是就是把你新摸到的牌在你的已有牌中由最大的(假如你摸到第i張,那麼就是從i-1張開始)向前對比,找到其位置 void InsertSort( int[] tab

排序演算法插入排序直接插入、希爾排序

前言 一個好的排序演算法對於程式的優化會有很大的提升,雖然在許多語言的類庫中就存在了N種排序方法,但是隻有在瞭解了每一種排序演算法後才能更好的在實際中運用這些演算法。這裡我主要說明插入排序中的直接插入以及希爾排序的實現。 直接插入 直接插入排序是最簡單的排序演算法之一。對於直

排序演算法插入排序關鍵詞:資料結構/演算法/排序演算法/插入排序

假定:有 1 個亂序的數列 nums ,其中有 n 個數。 要求:排好序之後是 從小到大 的順序。 插入排序演算法 程式碼 def insert_sort(nums): i = 1 n = len(nums) while i <= n-1: j = i

九大排序演算法插入排序原理及實現

1、演算法思路:每趟將一個待排序的元素作為關鍵字,按照其關鍵字值得大小插入到已經排好的部分的適當位置上,知道插入完成。 2、演算法過程 舉個栗子(第一趟的排序過程) 原始序列:49、38、65、97、76、13、27、49 1)開始以第一個元素49為關鍵字,看成一個序列,其餘數看成另

資料結構與演算法C++插入排序

上一篇資料結構與演算法C++之插入排序中使用C++實現了插入排序演算法,但是使用了交換操作(swap),一次swap操作包括三次移位操作,造成執行時間比較長,本篇部落格對其改進。 (1)首先,考慮第一個元素8,此時只有一個元素,是排好序的 (2)然後考慮第二個元素6 (3)將元素6拷

圖解算法系列插入排序Low版

(1)演算法描述 對於給定的線性空間,依次考察每個元素,當指定的元素比後一個元素大(或者小)的時候就交換位置,然後交換過來的後一個元素繼續向前比較,只要比該元素大(或者小)就兩兩交換,直到不符合交換條件或者到達最前端。 (2)演算法圖解 (3)C/C++程式碼實現 CustomSort.h

圖解算法系列插入排序優化版

(1)演算法描述 對於給定的一個線性空間,遍歷考察每一個元素,將當前元素拷貝一份,並將前一個元素拷貝到當前元素的原位置。拷貝出來的元素與前一個元素進行比較,如果滿足前一個元素大於或小於當前元素就將當前拷貝出來的元素放到當前位置,否則繼續向前比較。 (2)圖解演算法 (3)C/C++程式碼實現

十大經典排序演算法插入排序Insertion Sort

插入排序(Insertion-Sort)的演算法描述是一種簡單直觀的排序演算法。它的工作原理是通過構建有序序列,對於未排序資料,在已排序序列中從後向前掃描,找到相應位置並插入。插入排序在實現上,通常採用in-place排序(即只需用到O(1)的額外空間的排序),因而在從後向前掃描過程中,需要反覆