快速排序主要包括两个部分:主体递归部分以及左右分割部分。
下面是代码:
#include <iostream >
using namespace std;
int cnt = 0 ;
// 调整list,使得[low...pivot_pos-1]均小于[pivot_pos+1...high]
template < typename T >
int Partition( T list[], int low, int high )
{
T pivot = list[ low ];
while( low < high )
{
while( low < high && list[high] >= pivot ) high--;
if ( low < high ){ list[low++] = list[high]; cnt++;}
while( low < high && list[low] <= pivot ) low++;
if ( low < high ){ list[high--] = list[low]; cnt++;}
}
list[low] = pivot;
return low;
}
// 快速排序递归算法
template < typename T>
void QuickSort( T list[], int low, int high )
{
int pivot_pos = 0;
if ( low < high )
{
pivot_pos = Partition( list, low, high );
QuickSort(list, low, pivot_pos -1 );
QuickSort(list, pivot_pos+ 1, high );
}
}
int main()
{
int list[10] = { 3,1, 54, 21, 56, 23, 87, 6, 44, 32 };
//int list[10] = { 1,2,3,4,5,6,7,8,9,10 };
for ( int i =0 ; i != 10; i++){ cout << list[i] <<" ";}
cout << endl;
QuickSort(list, 0, 9 );
for ( i =0 ; i != 10; i++){ cout << list[i] <<" ";}
cout << endl;
cout << "cnt:" << cnt << endl;
}