1. 程式人生 > >排序演算法之直接插入排序的思想以及Java實現

排序演算法之直接插入排序的思想以及Java實現

1,基本思想
假設待排序的資料是陣列A[1….n]。初始時,A[1]自成1個有序區,無序區為A[2….n]。在排序的過程中,依次將A[i] (i=2,3,….,n)從後往前插入到前面已排好序的子陣列A[1,…,i-1]中的適當位置,當所有的A[i] 插入完畢,陣列A中就包含了已排好序的輸出序列。

2,演算法的實現(Java)

package Algorithm;

public class InsertSort {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
int[] a={11,10,55,78,100,111,45,56,79,90,345,1000};//建立一個數組a System.out.println("排序之前:"); InsertSort.output(a); System.out.println(); InsertSort.Sort(a); System.out.println("排序之後:"); InsertSort.output(a); } //插入排序 public static void Sort(int[] arr){ for
(int i=1;i<arr.length;i++){ int tempdata = arr[i]; int j; for(j=i-1;j>=0;j--){ if(arr[j]>tempdata){ arr[j+1] = arr[j]; }else{ break; } } arr[j+1
] = tempdata; } } //輸出列印 public static void output(int[] arr){ for(int i=0;i<arr.length;i++){ System.out.print(arr[i]+","); } } }

得到的結果如下所示:
這裡寫圖片描述

3,效能分析
空間複雜度 O(1)
時間複雜度O(n^2)

相關推薦

排序演算法直接插入排序思想以及Java實現

1,基本思想 假設待排序的資料是陣列A[1….n]。初始時,A[1]自成1個有序區,無序區為A[2….n]。在排序的過程中,依次將A[i] (i=2,3,….,n)從後往前插入到前面已排好序的子陣列A

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

相信許多人和我一樣,排序演算法看了好幾遍,當時看懂了,過幾天一些細節又忘記,所以現在講排序演算法做一個總結,從最基本的排序演算法展開來,首先分析直接插入排序和希爾排序。 1.直接插入排序 思想:把一個數插入到已經排序的有序序列中; 方法:將這個數與有序序列

java實現排序演算法直接插入排序

直接插入排序思想將待排序陣列看成兩部分,一部分為已排好序,一部分為待排序,初始時已排序部分只有第一個元素。每次需將帶排序部分的第一個元素A(將該元素儲存在臨時變數中)與已排序的元素由後往前一一比較,如果元素A小於比較的元素B,則元素B後移一位,如果碰到元素A小於元素B則將元素

基礎算法系列排序演算法-3. 直接插入排序 並用其解決HDU 1106 排序

      我們之前已經學習了氣泡排序和二分查詢兩種基本演算法,本篇文章我們將一起學習下一個基礎演算法——直接插入排序演算法。  直接插入排序      直接插入排序,從這個名字來看,是不是讓你想到了什麼場景?!對了,就是打撲克牌的場景,我們每摸一張牌,是不是按照一定的次

排序演算法直接插入(InsertSort)

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

資料結構與演算法直接插入排序

一、前言直接插入排序(Insertion Sort)序是一種最簡單的插入排序。為簡化問題,在此我們只討論升序排序。二、演算法思想插入排序:每一趟將一個待排序的記錄,按照其關鍵字的大小插入到有序佇列的合適位置裡,直到全部插入完成。假設有一組無序序列 R0, R1, ... ,

常用演算法直接插入排序

直接插入排序的原理:將陣列分為有序的陣列和無序的陣列兩個,在無需的陣列中挑出一個數插入到已經有序的陣列中直接插入排序的實現思路:程式開始可以將陣列的第一個位置的數作為有序的陣列,之後再將後面的陣列元素與有序的陣列一一比較,選擇合適的位置插入。直接插入排序特點:對於已經有序的陣

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

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

排序演算法 簡單插入排序

  簡單插入排序演算法原理:從整個待排序列中選出一個元素插入到已經有序的子序列中去,得到一個有序的、元素加一的子序列,直到整個序列的待插入元素為0,則整個序列全部有序。   在實際的演算法中,我們經常

八大排序演算法之一直接插入排序(C語言)

概述 排序有內部排序和外部排序,內部排序是資料記錄在記憶體中進行排序,而外部排序是因排序的資料很大,一次不能容納全部的排序記錄,在排序過程中需要訪問外存。 我們這裡說說八大排序就是內部排序。     當n較大,則應採用時間複雜度為O(nlog2n)的排序方法:快

排序演算法插入排序(Insertion Sort)

概述 插入排序是一種簡單直觀的排序演算法。它的工作原理非常類似於我們抓撲克牌,對於未排序資料(右手抓到的牌),在已排序序列(左手已經排好的牌)中從後向前掃描,找到相應位置並插入,同時需要反覆把已排序元素逐步向後挪位,為最新元素提供插入空間。 演算法描述 1.從第一個元素開始,即

我的Java開發學習旅------>Java經典排序演算法二分插入排序

一、折半插入排序(二分插入排序) 將直接插入排序中尋找A[i]的插入位置的方法改為採用折半比較,即可得到折半插入排序演算法。在處理A[i]時,A[0]……A[i-1]已經按關鍵碼值排好序。

排序演算法之一 直接插入排序

最近想對一些排序演算法做個總結。當然,這個對絕大多數人來說都是很簡單的,或者說都不想去關心的。對於我來說,雖然寫了些程式,但是基本功一直沒有好好夯實,特此惡補一下。此貼絕非原創,只是自己的一點積累。希望能和大家共勉。例子均以資料結構教材為依照,有些地方做了些修改。 文章其實

排序演算法之一--直接插入排序

直接插入排序中加入了附加記錄,又稱監視哨或者哨兵。 哨兵的主要作用:         ① 進人查詢(插入位置)迴圈之前,它儲存了R[i]的副本,使不致於因記錄後移而丟失R[i]的內容;      ②

排序演算法入門——直接插入排序

時間複雜度 ·        直接插入排序最好的時間複雜度為O(n) ·        直接插入排序的最壞時間複雜度為O(n^2) ·        因此直接插入排序總的平均時間複雜度為O(n^2) 注:具有穩定性 排序原理             雖然給

八大排序演算法之一——直接插入排序

1、基本思想,在要排序的一組數中,假定前面n-1(n>=2)個數字已經排好序,將第n個數加入,使得前n個數字都有序。如此迴圈n-1次,則前n個數字都有序了。2、實現。int main() { int a[10]={11,42,53,25,36,6,75,8,26

排序演算法--插入排序直接插入排序

直接插入排序的核心思想是把一個記錄插入一個有序序列中,每插入一個記錄就得到一個新的有序序列,直到所有記錄都插入成功,得到有序序列。 每次插入記錄時的有序序列如何得到,關鍵在第一次,第一次要插入的記錄時序列的第二個值,有序序列只有一個值,就是第一個記錄。 程式碼: #in

排序演算法氣泡排序思想以及Java實現

1 基本思想 設排序表長為n,從後向前或者從前向後兩兩比較相鄰元素的值,如果兩者的相對次序不對(A[i-1] > A[i]),則交換它們,其結果是將最小的元素交換到待排序序列的第一個位置,我們

簡單排序演算法簡單選擇排序直接插入排序

簡單選擇排序簡述: 簡單選擇排序(Simple Selection Sort)可以說是氣泡排序的一種改版,它不再兩兩比較出較小數就進行交換,而是每次遍歷比較當前數的後面所有數,最後再把最小的數和當前數

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

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