一:截圖
二:快速排序詳解
快速排序法(quicksort)是一種非常快的對比排序方法。它也divide-and-conquer思想的實現之一。自從其產生以來,快速排序理論得到了極大的改進,然而在實際中卻十分難以程式設計出正確健壯的**。本文將對快速排序演算法的基本理論和程式設計實踐方面做作乙個全面的講解。在本文講解中,將忽略很多細枝末節,試圖給讀者形成乙個非常具體的快速排序形象。
快速排序---基本理論
因為該演算法是divide-and-conquer思想的乙個實現,所以本文將以divide-and-conquer思想對其進行分析。首先,假設所要排序的數字儲存在陣列s中,則該演算法的操作可以拆分為兩部分:
該程式具有平均執行時間t(n) = o(nlgn), 最差執行時間t(n) = o(n^2);
下面給出乙個簡單的排序例項對以上演算法進行簡單說明:
初始陣列為--------------> s: 6,10,13,5,8,3,2,11
將第乙個元素賦值給v----->v = 6;
以v為標準將s進行拆分--->[2,5,3],[6],[8,13,10,11]
同樣對子陣列s1進行拆分->[ ], [2], [ 5, 3]
對子陣列s2進行拆分----->[ ], [8], [13, 10, 11]
此時的陣列s為---------->2,5,3,6,8,13,10,11
對子陣列s12進行拆分---->[3], [5],[ ];
對自陣列s22進行拆分---->[10,11],[13],
此時的陣列s為----------->2,3,5,6,8,10,11,13
對子陣列s221進行拆分--->[ ], [11], [13]
對後得到的陣列為-------->2,3,5,6,8,10,11,13;
三:**
usingsystem;
using
system.collections.generic;
using
system.componentmodel;
using
system.data;
using
system.drawing;
using
system.linq;
using
system.text;
using
system.windows.forms;
namespace
fastsort
private
int g_int_value;//
定義陣列字段
private random g_random = new random();//
建立隨機數物件
//交換資料
private
void swap(ref
int l, ref
intr)
//////
快速排序
/// ///
要排序的陣列
///陣列的起始位置
///陣列的結束位置
private
void sort(int list, int low, int
high)
mid = (low + high) >> 1;//
記錄陣列的中間索引,相當於(low + high)除以2
pivot = list[mid];//
初始化臨時變數的值
swap(ref list[low], ref list[mid]);//
交換第乙個值和中間值的索引順序
l = low + 1;//
記錄遍歷到的索引值
r = high;//
記錄最大索引
try
while (l
list[low] = list[r];//
在最小索引處記錄最小值
list[r] = pivot;//
在最大索引處記錄最大值
if (low + 1
< r)//
判斷最小索引是否小於最大索引
sort(list, low, r - 1);//
呼叫自身進行快速排序
if (r + 1
< high)//
判斷最大索引是否小於陣列長度
sort(list, r + 1, high);//
呼叫自身進行快速排序
}
catch
}private
void btn_sort_click(object
sender, eventargs e)
}else
}private
void btn_generate_click(object
sender, eventargs e)
txt_str.clear();
//清空控制項內字串
foreach (int i in g_int_value)//
遍歷字串集合}}
}
js 陣列排序法(氣泡排序 快速排序)
1.氣泡排序 原理 將陣列的相鄰兩個元素進行比較,大的就往後移,小的往前,依次比較並且進行遞減迭代。var arr 54,36,89,1,3,5,2 function sortarr arr return arr sortarr arr 3.快速排序法 原理 選擇乙個基準點,一般選摺為math.fl...
《經典排序演算法 快速排序》
快速排序是實踐中已知的最快的排序演算法,平均執行時間o nlogn 該演算法之所以快是因為非常精煉和高度優化的內部迴圈。它也是一種分治的遞迴演算法,將陣列s排序的基本演算法由下列簡單的四步組成 如果s中元素個數是0或1,則返回。取s中任一元素v,稱之為樞紐元。將s 分成兩個不相交的集合s1 x v ...
經典排序演算法 快速排序
使用分割槽演算法並找出主元 對主元兩邊的序列分別進行排序 整體時間複雜度 o nlog n public class quicksort 分割槽演算法 public static intpartition int a,int l,int r else if a l a mid a l a r els...