基本思想:
通过一趟排序将要排序的数据分割成独立的两部分,其中一部分所有数据都比另一部分的所有数据要小,然后再按此方法对这两部分分别进行快速排序,递归进行,直到数列成为有序序列。
每一趟快速排序算法步骤:Partition( A, p, q)
1. 设置两个变量i, j,排序开始的时候:i = p, j = p+1;
2. 第一个数组元素作为关键数据,赋值给key,即key=A[p];
3. 从j开始向后搜索直到j = q,找到小于key的值,即 A[j] <= x, 则 i = i+1,A[i] 与 A[j]交换;
4. A[p] 与 A[i]交换位置
5. 返回i值
时间复杂度:O(nlogn)
程序如下:
// Quick sort program
import java.io.IOException;
import java.util.Arrays;
public class QuickSort {
public static void main( String args[] ) throws IOException
{
int a[ ] = { 6, 10, 13, 5, 8, 3, 2, 11 };
// print the original array
System.out.println( "The original array:" );
System.out.println( Arrays.toString( a ) );
// sort the array
quickSort( a, 0, a.length - 1 );
// print the sorted array
System.out.println( "The sorted array:" );
System.out.println( Arrays.toString( a ) );
}
public static void quickSort( int[] a, int low, int high )
{
if ( low < high ) {
int r = partition( a, low, high );
quickSort( a, low, r - 1 );
quickSort( a, r + 1, high );
}
}
public static int partition( int[] a, int p, int q )
{
int i = p;
int key = a[ p ];
for ( int j = p + 1; j <= q; j++ )
{
if ( a[ j ] <= key ) {
i = i + 1;
int temp = a[ j ];
a[ j ] = a[ i ];
a[ i ] = temp;
}
}
a[ p ] = a[ i ];
a[ i ] = key;
return i;
}
}