想到了快速排序,於是自己就用c#實現了快速排序的演算法:
快速排序的基本思想:
分治法,即,分解,求解,組合 .
分解:
在 無序區r[low..high]中任選乙個記錄作為基準(通常選第乙個記錄,並記為keyvalue,其下標為keyvalueposition),以此為基準劃分成兩個較小的 子區間r[low,
keyvalueposition
- 1]和r[
keyvalueposition
+ 1 , high],並使左邊子區間的所有記錄均小於等於基準記錄,右邊子區間的所有記錄均大於等於基準記錄,基準記錄無需參加後續的排序。而劃分的關鍵是要求出 基準記錄所在的位置
keyvalueposition
.求解:
通過遞迴呼叫快速排序對左、右子區間r[low..
keyvalueposition
-1]和r[
keyvalueposition
+1..high]快速排序
組合:
當"求解"步驟中的兩個遞迴呼叫結束時,其左、右兩個子區間已有序。對快速排序而言,"組合"步驟無須做什麼,可看作是空操作。
具體過程:
設序列為r[low,high],從其中選第乙個為基準,設為keyvalue,然後設兩個指標i和j,分別指向序列r[low,high]的起始和結束位置上:
1),將i逐漸增大,直到找到大於
keyvalue
的關鍵字為止;
2),將j逐漸減少,直到找到小於等於
keyvalue
的關鍵字為止;
3),如果i
keyvalue
放到合適的位置上,即i和j同時指向的位置(或者同時指向的位置-1),則此位置為新的
keyvalueposition
。備註:
快速排序是不穩定排序,即相同的關鍵字排序後,相對位置是不確定的。
下面是我的c#實現的**
1using
system;
2using
system.collections.generic;
3using
system.linq;
4using
system.text;56
namespace
quicksort7;
14//
myarray = new int ;
15//
myarray = new int ;
1617
intlowindex =0
;
//陣列的起始位置(從0開始)
18int
highindex
=myarray.length -1
;
//陣列的終止位置
1920
//快速排序
21quicksortfunction(myarray, lowindex, highindex);
2223
//輸出排完之後的陣列
24for
(inti =
0; i
<
myarray.length; i++)
2528}29
30//
快速排序(目標陣列,陣列的起始位置,陣列的終止位置)
31private
static
void
quicksortfunction(
int array,
intlow,
inthigh)
3245}46
catch
(exception ex)
4748}49
50//
快速排序的核心部分:確定關鍵值在陣列中的位置,以此將陣列劃分成左右兩區間,關鍵值游離在外。(返回關鍵值應在陣列中的下標)
51private
static
intkeyvaluepositionfunction(
int array,
intlow,
inthigh)
5266
while
(leftindex
<
rightindex
&&array[rightindex]
>
keyvalue)
//右側動態下標逐漸減小,直至找到小於或等於keyvalue的下標
6770
if(leftindex
<
rightindex)
//如果leftindex < rightindex,則交換左右動態下標所指定的值;當leftindex==rightindex時,跳出整個迴圈
7176}77
78//
當左右兩個動態下標相等時(即:左右下標指向同乙個位置),此時便可以確定keyvalue的準確位置
79temp
=keyvalue;
80if
(temp
<
array[rightindex])
//當keyvalue < 左右下標同時指向的值,將keyvalue與rightindex - 1指向的值交換,並返回rightindex - 1
8186
else
//當keyvalue >= 左右下標同時指向的值,將keyvalue與rightindex指向的值交換,並返回rightindex
8792}93
}94}
。。。。。。。。。。
快速排序演算法 c 實現
namespace backpackproblem backpack bp new backpack profit int start 0 int end profit.length 1 bp.quicksort profit,start,end bp.print class backpack 快速...
快速排序演算法C 實現
經常看到有人在網上發快速排序的演算法,通常情況下這些人是在準備找工作,或者看 演算法導論 這本書,而在他們發布的 通常是差不多的版本,估計也是網上 copy 一下,自己改改,跑過了就算了,但是通常這樣玩根本沒有太大作用,如果到一家公司,給你一台不能上網的筆記本,20分鐘,你是根本寫不出來快速排序的演...
快速排序演算法C 實現
quick sort stl中也有現成的快速排序演算法,內部實現採用了以下技巧 1 樞軸的選擇採取三數取中的方式 2 後半段採取迴圈的方式實現 3 快速排序與插入排序結合 include include includeusing namespace std 這一版本是最簡單實現版本,對於快速排序的優...