算法Java—B组实战篇之双向快速排序
快速排序的方法有很多,这里我介绍一下双指针收尾快速排序,也是平时用的最多的快速排序方法。其余的(单项扫描法、三指针分区法、三点中值法、绝对中值法)我就不一一介绍了。
public class QuickSort {
public static void main ( String[ ] args) {
int [ ] arr = num ( 15 , 100 ) ;
System. out. println ( "排序前:" ) ;
for ( int i = 0 ; i < arr. length; i++ ) {
System. out. print ( arr[ i] + "\t" ) ;
}
System. out. println ( ) ;
quickSort ( arr, 0 , arr. length - 1 ) ;
System. out. println ( "排序后:" ) ;
for ( int i = 0 ; i < arr. length; i++ ) {
System. out. print ( arr[ i] + "\t" ) ;
}
}
private static int [ ] num ( int len, int max) {
int [ ] arr = new int [ len] ;
for ( int i = 0 ; i < arr. length; i++ ) {
arr[ i] = ( int ) ( Math. random ( ) * max) ;
}
return arr;
}
public static void quickSort ( int [ ] arr, int low, int high) {
if ( low > high) {
return ;
}
int left = low;
int right = high;
int key = arr[ low] ;
while ( left < right) {
while ( key <= arr[ right] && left < right) {
right-- ;
}
while ( key >= arr[ left] && left < right) {
left++ ;
}
if ( left < right) {
int temp = arr[ left] ;
arr[ left] = arr[ right] ;
arr[ right] = temp;
}
}
arr[ low] = arr[ left] ;
arr[ left] = key;
quickSort ( arr, low, left - 1 ) ;
quickSort ( arr, right + 1 , high) ;
}
}