1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
|
#include <iostream>
#include <algorithm>
using namespace std;
void QuickSort( int A[], int left, int right )
{
if ( right <= left ) return;
int value = A[(left+right)/2]; // many choices
// Partition such that A{ left . . k } <= value <= A{ k+1 . . right }
int j = left - 1;
int k = right + 1;
while ( true )
{
do j++; while ( A[j] < value );
do k--; while ( A[k] > value );
if ( j >= k ) break; // if pointers cross, then done
swap( A[j], A[k] ); // move elements into the other partition
}
QuickSort( A, left , k );
QuickSort( A, k + 1, right );
}
int main()
{
int A[] = { 10, 9, 8, 7, 6, 5, 4, 3, 2, 1 };
//int A[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
//int A[] = { 5, 5, 5, 5, 5 };
//int A[] = { 5, 4, 3, 2, 1, 1, 2, 3, 4, 5 };
int N = sizeof A / sizeof A[0];
for ( int i = 0; i < N; i++ ) cout << A[i] << ' ';
cout << '\n';
QuickSort( A, 0, N - 1 );
for ( int i = 0; i < N; i++ ) cout << A[i] << ' ';
cout << '\n';
}
| |