排序演算法講解(一)

2021-07-15 10:35:39 字數 1082 閱讀 4009

排序演算法無論是在平時生活中還是在acm-icpc中都比較常用,也很重要。畢竟,在真正的資料處理過程中如果提前對資料進行有效而良好的排序,那麼資料處理起來將會變得比較簡潔。這裡給大家介紹幾個常用的排序演算法。

一、插入排序:

插入排序的過程有一些類似於打撲克。相信絕大多數打過撲克的朋友都有這樣的習慣,每抓一張牌,就要結合手中已有的牌進行分門別類並且按照一定的順序進行排列。這樣,在真正開始打牌的時候由於牌面比較規整,打起牌來會比較容易。我們結合具體例項,看看插入排序的過程是不是很像打撲克時抓牌時的情形:

例如:有這麼乙個陣列,裡面存了這樣幾個元素:5、9 、4 、2、 3 、10.。  我們用「」代表整個集合,即整副撲克牌。用「 ()」代表已經排好順序的牌,相當於抓在你手中的牌。

首先,抓牌的時候肯定是從頭開始抓,你首先抓到了 5 這張牌。於是5 這張牌就在你的手中了。所以結果為。(初始狀態)

然後,你抓下一張牌,抓到了9這張牌,與你手中已有的牌比較之後發現9比5大,所以排在5的後面,此時5,9兩張牌就都在你手裡了。結果為。(第一趟排序)

再往下,你抓到了4這張牌,與你手中已有的牌比較之後發現:4比5小,於是排在了最前面,結果為:。(第二趟排序)

再往下,你抓到了2這張牌,與你手中已有的牌比較之後發現:2比4小,於是2排在了最前面,結果為:。(第三趟排序)

再往下,你抓到了3這張牌,與你手中已有的牌比較之後發現:3大於2而小於4,於是排在2和4之間,結果為:。(第四趟排序)

最後,你抓到了最後一張牌10,與你手中已有的牌比較之後發現:它是最大的,於是排在最後面,結果為:。(第五趟排序)

排序結束。

大家可以自己多舉幾個類似的例子,多試幾下就會發現,如果乙個陣列中有n個元素要進行排序,那麼用插入排序演算法,你需要進行n-1趟排序就能完成排序。插入排序在資料量較小的情況下比較實用,效率較高。

**:#includeusing namespace std;

///插入排序,從a[0]開始儲存資料

void insertsort(int a,int n) ///a代表儲存資料的陣列,n代表有幾個元素需要排序

void bubblesort(int a, int n)

}i++;

}while(i

基數排序演算法,講解 演算法實現

經典排序演算法 基數排序radix sort 原理類似桶排序,這裡總是需要10個桶,多次使用 首先以個位數的值進行裝桶,即個位數為1則放入1號桶,為9則放入9號桶,暫時忽視十位數例如 待排序陣列 62,14,59,88,16 簡單點五個數字 分配10個桶,桶編號為0 9,以個位數數字為桶編號依次入桶...

幾種排序演算法的講解(二)

希爾排序其實是直接插入排序演算法的一種變形,實質是分組插入排序。又稱縮小增量排序。該方法首先要理解分組操作,其實是以間隔分組,即每間隔幾個數後就分做一組,然後進行插入排序。接著把間隔縮短一半,以此下去,直到間隔沒有,才停下操作。如 有10個資料,開始的時候每間隔10 2 5 劃為一組,即第1個數與第...

java氣泡排序演算法深度講解

1.首先我們先測試以下,隨機數目為10個,看看氣泡排序所用時間。public class bubblesort system.out.print 排序之前陣列 for int i 0 i a.length i system.out.println long start time system.cur...