排序演算法無論是在平時生活中還是在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...