白話經典演算法系列二 插入排序的三種實現

2021-08-14 16:32:50 字數 1007 閱讀 2565

直接插入排序(insertion sort)的基本思想是:每次將乙個待排序的記錄,按其關鍵字大小插入到前面已經排好序的子串行中的適當位置,直到全部記錄插入完成為止。

設陣列為a[0…n-1]。

1.      初始時,a[0]自成1個有序區,無序區為a[1..n-1]。令i=1

2.      將a[i]併入當前的有序區a[0…i-1]中形成a[0…i]的有序區間。

3.      i++並重複第二步直到i==n-1。排序完成。

public int insertsort1(int a) 

// a[j]值重新寫入

a[j] = temp;

// 此時新的有序區已經形成,可以退出當前迴圈

break;}}

} return a;

}

**雖然思路清晰,但是結構過於複雜。現在進行改寫,調整思路後發現當進入外層迴圈for (int i = 1; i < a.length; i++)時,一旦滿足a[i] < a[i - 1],就可以確定當前有序區元素位置需要調整。但是並不能確定a[i]具體的插入位置。此時我們採用倒序遍歷,令j=i-1,temp=a[i]。然後一邊將資料a[j]向後移動一邊向前搜尋,當有資料a[j]

public int insertsort2(int a) 

a[j + 1] = temp;

}} return a;

}

insertsort1, insertsort2中插入a[i]的方式都採用資料後移操作,也可以使用資料交換的方式代替,insertsort3使用資料交換的方式對insertsort2進行改寫,**得到進一步簡化。這種實現和冒泡演算法很相似,作者想說的是,對經典演算法而言重要的是體會演算法的設計思想,具體的實現只是一種方式而已,不必在細節上多做爭論。

public int insertsort3(int a) 

} return a;

}

經典演算法系列之 插入排序

1 前言 演算法,在計算機中的地位,就相當於人類大腦的決策中樞系統,哪怕最簡單的演算法,其精妙的思維方式,都可以讓人開啟一扇新的視窗。演算法,它不僅僅只是狹義的用來解決電腦科學領域的問題,更是一種 思維方式 演算法思維,是一種深度思考和創造的過程。演算法,只有真正理解了,而不只是所謂的知道,並將應用...

白話經典演算法系列

堆排序與快速排序,歸併排序一樣都是時間複雜度為o n logn 的幾種常見排序方法。學習堆排序前,先講解下什麼是資料結構中的二叉堆。二叉堆的定義二叉堆是完全二叉樹或者是近似完全二叉樹。二叉堆滿足二個特性 1 父結點的鍵值總是大於或等於 小於或等於 任何乙個子節點的鍵值。2 每個結點的左子樹和右子樹都...

白話經典演算法系列之二 直接插入排序的三種實現

直接插入排序 insertion sort 的基本思想是 每次將乙個待排序的記錄,按其關鍵字大小插入到前面已經排好序的子串行中的適當位置,直到全部記錄插入完成為止。設陣列為a 0 n 1 1.初始時,a 0 自成1個有序區,無序區為a 1.n 1 令i 1 2.將a i 併入當前的有序區a 0 i ...