单向指针扫描
void Swap ( int i, int j, int array[ ] )
{
int temp;
temp = array[ i] ;
array[ i] = array[ j] ;
array[ j] = temp;
}
void QuickSort ( int begin, int end, int array[ ] )
{
if ( begin< end)
{
int mid = Partition ( begin, end, array) ;
QuickSort ( begin, mid- 1 , array) ;
QuickSort ( mid + 1 , end, array) ;
}
}
int Partition ( int begin, int end, int array[ ] )
{
int pivot = array[ begin] ;
int sp = begin + 1 ;
int bigger = end;
while ( sp<= bigger)
{
if ( array[ sp] > pivot)
{
Swap ( sp, bigger, array) ;
bigger-- ;
}
else
{
sp++ ;
}
}
Swap ( begin, bigger, array) ;
return bigger;
}
双向指针扫描
int DoubblePartition ( int begin, int end, int array[ ] )
{
int pivot = array[ begin] ;
int left = begin + 1 ;
int right = end;
while ( left<= right)
{
if ( array[ left] <= pivot && left <= right)
{
left++ ;
}
if ( array[ right] > pivot&& left <= right)
{
right-- ;
}
else if ( left< right)
{
Swap ( left, right, array) ;
}
}
Swap ( begin, right, array) ;
return right;
}
void DoubbleQuickSort ( int begin, int end, int array[ ] )
{
if ( begin < end)
{
int mid = DoubblePartition ( begin, end, array) ;
DoubbleQuickSort ( begin, mid - 1 , array) ;
DoubbleQuickSort ( mid + 1 , end, array) ;
}
主函数(生成随机数组测试数据)
int main ( ) {
srand ( ( unsigned int ) time ( NULL ) ) ;
int s[ 9 ] ;
cout << "初始数组为:" ;
for ( int i = 0 ; i < 9 ; i++ )
{
s[ i] = rand ( ) % 100 ;
cout << s[ i] << "," ;
}
cout << endl;
DoubbleQuickSort ( 0 , 8 , s) ;
cout << "快速排序后数组为" ;
for ( int i = 0 ; i < 9 ; i++ )
{
cout << s[ i] << "," ;
}
system ( "pause" ) ;
return 0 ;
}
测试结果
有相同元素的三分法(待更新)