【算法】C#快速排序类

快速排序的基本思想是基于分治策略的。对于输入的子序列ap..ar,如果规模足够小则直接进行排序,否则分三步处理:

分解(Divide): 将输入的序列ap..ar划分成两个非空子序列ap..aq和aq+1..ar,使ap..aq中任一元素的值不大于aq+1..ar中任一元素的值。
递归求解(Conquer): 通过递归对p..aq和aq+1..ar进行排序。
合并(Merge): 由于对分解出的两个子序列的排序是就地进行的,所以在ap..aq和aq+1..ar都排好序后不需要执行任何计算ap..ar就已排好序。
这个解决流程是符合分治法的基本步骤的。因此,快速排序法是分治法的经典应用实例之一。

using System;

namespace VcQuickSort
{
///

1<summary>   
2/// ClassQuickSort 快速排序。   
3/// 范维肖   
4/// </summary>

public class QuickSort
{
public QuickSort()
{
}

private void Swap(ref int i,ref int j)
//swap two integer
{
int t;
t=i;
i=j;
j=t;
}

public void Sort(int [] list,int low,int high)
{
if(high<=low)
{
//only one element in array list
//so it do not need sort
return;
}
else if (high==low+1)
{
//means two elements in array list
//so we just compare them
if(list[low]>list[high])
{
//exchange them
Swap(ref list[low],ref list[high]);
return;
}
}
//more than 3 elements in the arrary list
//begin QuickSort
myQuickSort(list,low,high);
}

public void myQuickSort(int [] list,int low,int high)
{
if(low

 1<high) &&="" []="" arrary="" get="" high)="" int="" list="" list,int="" list[high]="" low,int="" myquicksort(list,low,pivot-1);="" myquicksort(list,pivot+1,high);="" of="" partition(int="" pivot="list[low];" pivot;="" private="" the="" while(low<high="" while(low<high)="" {="" }="">=pivot)   
 2{   
 3high--;   
 4}   
 5if(low!=high)   
 6{   
 7Swap(ref list[low],ref list[high]);   
 8low++;   
 9}   
10while(low&lt;high &amp;&amp; list[low]&lt;=pivot)   
11{   
12low++;   
13}   
14if(low!=high)   
15{   
16Swap(ref list[low],ref list[high]);   
17high--;   
18}   
19}   
20return low;   
21} 
22
23}   
24}</high)>
Published At
Categories with Web编程
Tagged with
comments powered by Disqus