排序演算法應該是大學畢業後用到頻率較高的為數不多的幾個演算法之一,通常情況下根據原理不同分為幾個不同的類別,對我個人來說,主要的類別:
1,隨意寫隨意用無視效率的冒泡,插入,選擇三種基本排序
2,最常用的效率相對前三種較好的快速排序,快排
3,神特麼除了多年寫作業刷題庫沒有遇到過實際應用場景的堆排、歸併排序
首先我們介紹的是氣泡排序,這個應該是接觸排序時學會的第一種排序方式,早在久遠的初中普及vb時代就用過氣泡排序,其根本原理是每次比較相近的兩處,如果二者順序與要求的排序順序相反則交換二者順序,這樣每次應該至少乙個元素排到它所應該在的位置
1執行結果:void maopao_sort(inta)2
10}11for(int i =0 ; i<10;i++)
12 cout
13 cout<
15 }
從結果中我們很明顯的看到,如果存在已經排好的序列,程式是依然會繼續執行,直到徹底迴圈完o(n^2)才結束,針對這個,可以通過加入標識位來判斷,如果已經排好序的位置,將不會進行處理。
1void maopao_sort2 ( int a, int
n) 13
}14 i= flag; //
為下一趟排序作準備
少了一次。。。。
插入排序在我的理解裡就像我們小時候打撲克摸牌,從牌堆裡抽排,手初始時是空,然後按照從小到大,或者從大到小順序排列,手中形成有序序列後,新摸得牌就會順序檢索它應該所在的為止,插入,插入位置後面的牌順序後移一位
效果如圖。。。非常非常明顯的看到,主要損失的效率在於存在較長的順序序列時,該方法依然逐個進行。據說改進方法希爾排序屬於插入排序公升級版,因為並不熟悉,後期研究後加入。
選擇排序,選擇最大/最小元素接在已拍好序列後
快速排序,使用了分治和遞迴的方法,將排序的時間複雜度降到了nlgn,雖然不穩定,屬於常用的理解很方便的一種排序,主要原理: 任選陣列頭尾任一元素作為標尺flag,將小於flag的元素放到左邊,大於flag的元素放到右邊,這樣形成了兩個小的序列,隨後對這兩個小序列如上方法進行遞迴。網上可以直接搜尋快速排序gif,很簡潔明瞭的告訴如何實現的。
Daily Scrum 之 第一幕 怎麼寫呀
公元2012年10月30日深夜22 30,在北航六食堂,我們codingcook小組進行了第一次daily scrum。規則 從10月30日開始,每晚10點半在六食堂進行daily scrum。每位組員講述自己今天所做好的事情,遇到的問題和解決方法,於昨天的目標相比完成度。同時要制定好明天的任務計畫...
演算法導論 排序演算法學習(1)
插入排序有點類似於我們打牌時整理手牌的過程,以左手拿牌,右手起牌為例。左手上面的牌,總是按照從小到大 從大到小 的順序排列,而右手拿上來的牌則根據大小在左手選擇位置插入,從而依舊保證了左手手牌依然是有序的。void insertsort int array,int length array j 1 ...
演算法學習 1 快速排序
序 快速排序比較難以理解,多baidu下,多想想最後就明白了,以下是自己的理解 有興趣的可以參考 來學習演算法 有兩種實現模式 1 找到乙個交換乙個 左右側 如下 void quicksort qsort wk int s,int lindex,int rindex if lindex rindex...