C语言版
#include <stdio.h>
void disp_array( int a[], int n )
{
int i;
for( i = 0; i < n; ++i )
printf( "%d ", a[i] );
printf( "\n" );
}
int partition( int a[], int low, int high )
{
int piv_val = a[low];
while( low < high )
{
while( low < high && a[high] >= piv_val ) --high;
a[low] = a[high];
while( low < high && a[low] <= piv_val ) ++low;
a[high] = a[low];
}
a[low] = piv_val;
return low;
}
void qsort_recur( int a[], int low, int high )
{
int idx_piv;
if( low < high )
{
idx_piv = partition( a, low, high );
qsort_recur( a, low, idx_piv - 1 );
qsort_recur( a, idx_piv + 1, high );
}
}
void quick_sort( int a[], int n )
{
qsort_recur( a, 0, n - 1 );
}
int main()
{
int a[] = { 49, 38, 65, 97, 76, 13, 27, 49 };
int n = 8;
printf( "Before sorting: " );
disp_array( a, n );
quick_sort( a, n );
printf( "After sorting: " );
disp_array( a, n );
return 0;
}
Java语言版
public class TestSort {
public static void dispArray( int a[] ) {
for( int i = 0; i < a.length; ++i )
System.out.print( a[i] + " " );
System.out.println();
}
/*
* quick sort
*/
private static int partition( int [] a, int low, int high ) {
int pivKey = a[low];
while( low < high ) {
while( low < high && a[high] >= pivKey )
--high;
a[low] = a[high];
while( low < high && a[low] <= pivKey )
++low;
a[high] = a[low];
}
a[low] = pivKey;
return low;
}
private static void qsort( int [] a, int low, int high ) {
int pivKeyPos;
if( low < high ) {
pivKeyPos = partition( a, low, high );
qsort( a, low, pivKeyPos - 1 );
qsort( a, pivKeyPos + 1, high );
}
}
public static void quickSort( int [] a ) {
qsort( a, 0, a.length - 1 );
}
public static void main( String[] args ) {
int a[] = { 100, 49, 38, 65, 97, 76, 13, 27, 49 };
System.out.print( "Before sorting: " );
dispArray( a );
quickSort( a );
System.out.print( "Quick sorting: " );
dispArray( a );
System.out.println();
}
}