排序演算法歸總

2021-04-13 22:26:02 字數 1861 閱讀 2727

排序演算法歸總: 參考:http://blog.csdn.net/johnny_83/archive/2007/11/07/1871751.aspx

排序知識:

一. 排序的分類

1. 內部排序:內部排序(簡稱內排序),是帶排序紀錄存放在計算機記憶體中,並進行的排序過程。

2. 外部排序:指的是帶排序紀錄的數量很大,以致記憶體一次不能容納全部紀錄,在排序過程中,只有部分數被調入記憶體,並借助記憶體調整數在外存中的存放順序排序方法。

二. 排序的穩定性

如果排序前後相等數的先後位置不變,則為穩定排序,否則為不穩定排序。

三. 常用排序演算法:

1.插入排序

1)直接插入排序(撲克排序)

演算法複雜度:o(n^2)

void insertsort(type a, int n)

}2)希爾排序(縮小增量法)

屬於插入類排序,將整個無序列分割成若干小的子串行分別進行插入排序 

排序過程:先取乙個正整數d1 0; increment /= 2)

for(i = increment; i < n; i++) //組內進行直接插入排序

}2. 選擇排序

1)簡單選擇排序

演算法複雜度:o(n^2)

void selectsort(type a, int n)

}2)堆排序

3. 交換排序

1)氣泡排序

void bubblesort(type a, int n)

2)快速排序

快速排序方法的實質是將一組關鍵字 [k1 ,k2 ,…,kn ] 進行分割槽交換排序。

演算法思路

a.以第乙個關鍵字k1為控制字,將[k1 ,k2 ,…,kn]分成兩個子區,使左區所有關鍵字小於等於k1,右區所有關鍵字大於等於k1,最後控制字居兩個子區中間的適當位置。在子區內資料尚處於無序狀態。

b.對左,右區進行與第a步相類似的處理,又得到它的左子區和右子區,控制字居中。

c.重複第a,b步,直到左,右區處理完畢。

排序演算法遞迴實現:

/*返回pivot的index

*/int partition(type array, int low, int high)

return low;

}void qsort(type array, int low, int high)

}4. 歸併排序

兩路歸併排序演算法思路:

a.把 n 個記錄看成 n 個長度為 l 的有序子表;

b.進行兩兩歸併使記錄關鍵字有序,得到 n/2 個長度為 2 的有序子表;

c.重複第b步直到所有記錄歸併成乙個長度為 n 的有序表為止。

void merge (type array, int p, int q, int r)

{int i,k;

int begin1,end1,begin2,end2;

int* temp = (int*)malloc((r-p)*sizeof(int));

begin1 = p;

end1 = q;

begin2 = q+1;

end2 = r;

k = 0;

while(begin1 <= end1 && begin2 <= end2)

{if (array[begin1]

演算法 遞迴與尾遞迴總結

前言 今天上網看帖子的時候,看到關於尾遞迴的應用 大腦中感覺這個詞好像在 見過,但是又想不起來具體是怎麼回事。如是乎,在網上搜了一下,頓時豁然開朗,知道尾遞迴是怎麼回事了。下面就遞迴與尾遞迴進行總結,以方便日後在工作中使用。1 遞迴 關於遞迴的概念,我們都不陌生。簡單的來說遞迴就是乙個函式直接或間接...

學習遞迴(總結)

學習遞迴 總結 遞迴是設計和描述演算法的一種有力的工具,由於它在複雜演算法的描述中被經常採用,為此在進一步介紹其他演算法設計方法之前先討論它。能採用遞迴描述的演算法通常有這樣的特徵 為求解規模為n的問題,設法將它分解成規模較小的問題,然後從這些小問題的解方便地構造出大問題的解,並且這些規模較小的問題...

rtmp聊天相關歸總

使用共享物件 sharedobject 來開發時時文字聊天其實是很簡單的。sharedobject可以跟蹤和廣播訊息,連線到sharedobject中的其中任何乙個客戶端改變了sharedobject中的資料,sharedobject就會將最新的資料廣播到連線到它的所有客戶端。從某種角度可以理解為遠...