排序總結(二)

2021-07-10 12:14:40 字數 1776 閱讀 2342

前言:

本篇總結插入排序和希爾排序,把兩種放在一起討論的原因,兩種排序的演算法的思想是很相似的,可以說希爾排序就是插入排序的改進版本。

一,插入排序

插入排序(insertion sort)

是一種簡單直觀的

排序演算法

。它的工作原理是通過構建有序序列,對於未排序資料,在已排序序列中從後向前掃瞄,找到相應位置並插入。

插入排序

在實現上,通常採用in-place排序(即只需用到o(1)的額外空間的排序),因而在從後向前掃瞄過程中,需要反覆把已排序元素逐步向後挪位,為最新元素提供插入空間。

例子:

時間複雜度:最好

最差**:

void insertionsort(anytype a)

a[j]=tmp;//插入

}

二,希爾排序希爾排序

,也稱遞減增量排序演算法

,是插入排序

的一種更高效的改進版本。希爾排序是

非穩定排序演算法。

希爾排序是基於插入排序的以下兩點性質而提出改進方法的:

基本思想:

先將整個待排元素序列分割成若干個子串行(由相隔某個「增量」的元素組成的)分別進行直接插入排序,然後依次縮減增量再進行排序,待整個序列中的元素基本有序(增量足夠小)時,再對全體元素進行一次直接插入排序。因為直接插入排序在元素基本有序的情況下(接近最好情況),效率是很高的,因此希爾排序在時間效率上比前兩種方法有較大提高。

示例:(這裡用了較少的元素,和相隔比較近的增量,只在為了演示希爾排序的原理。)

n=3時:

第一趟排序的結果:

n=2時:

第二趟排序的結果:

n=1時,直接做一次插入排序,結果為

2,3,4,5,6,7,9

示例**為:

public static >

void shellsort(anytype a)

a[j]=tmp;

}} }

排序演算法總結(二)

歸併排序 歸併 merge 排序法是將兩個 或兩個以上 有序表合併成乙個新的有序表,即把待排序序列分為若干個子串行,每個子串行是有序的。然後再把有序子串行合併為整體有序序列。我們一般取中位數,將前後兩部分排序在歸併為乙個序列,遞迴完成。include using namespace std void...

排序演算法總結(二)

歸併排序演算法思想是分而治之。下面將對分而治之演算法排序做乙個簡單描述。歸併排序之分而治之 void sort e,n else 對e插入排序 當k 2的時候,分而治之的排序演算法稱之為歸併排序,嚴格的來說是二路歸併排序,它的空間複雜度是o n 時間複雜度為o nlogn 歸併排序函式用乙個陣列a來...

排序演算法總結 二

排序演算法是一種基本並且常用的演算法。由於實際工作中處理的數量巨大,所以排序演算法對演算法本身的速度要求很高。而一般我們所謂的演算法的效能主要是指演算法的複雜度,一般用o方法來表示。在後面我將給出詳細的說明。對於排序的演算法我想先做一點簡單的介紹,也是給這篇文章理乙個提綱。我將按照演算法的複雜度,從...