【算法】C#快速排序类
【算法】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
{
///
/// ClassQuickSort 快速排序.
/// 范维肖
///
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 { int pivot=Partition( list,low,high ); myQuickSort( list,low,pivot-1 ); myQuickSort( list,pivot+1,high ); } } private int Partition( int [] list, int low, int high ) { //get the pivot of the arrary list int pivot; pivot=list[low]; while( low { while( low { high--; } if( low!=high ) { Swap( ref list[low],ref list[high] ); low++; } while( low { low++; } if( low!=high ) { Swap( ref list[low],ref list[high] ); high--; } } return low; } } }