排序演算法歸總: 參考: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就會將最新的資料廣播到連線到它的所有客戶端。從某種角度可以理解為遠...