快速排序基本原理:
首先选一个基准值,即tmp=6;然后分别从数组的两端开始扫描数组,设两个指针,lo指向,hi指向末尾。 首先从后半部分开始,如果扫描到的值大于基准数据就让hi-1,如果发现有元素比基准数据的值小,就将hi位置的值赋给low位置 然后再从前往后扫描,如果扫描到的值小于基准数据就让lo+1,如果发现有元素大于基准数据的值,就再讲lo位置的值赋给hi位置的值 然后再开始从后向前扫描,原理同上 这样一遍走下来,可以很清楚的知道,其实快速排序的本质就是把比基准数大的都放在基准数的右边,把比基准数小的放在基准数的左边,这样就找到了该数据在数组中的正确位置 以后采用递归的方式分别对前半部分和后半部分排序,当前半部分和后半部分均有序时该数组就自然有序了。
快速排序代码实现:
public class MyDemo {
private int [ ] arr;
private int size;
public MyDemo ( int size) {
this . size = size;
this . arr = new int [ size] ;
Random rand = new Random ( ) ;
for ( int i = 0 ; i < size; i++ ) {
this . arr[ i] = rand. nextInt ( 100 ) ;
}
}
public void show ( ) {
for ( int i = 0 ; i < size; i++ ) {
System. out. print ( this . arr[ i] + " " ) ;
}
System. out. println ( ) ;
}
public void bobo ( ) {
for ( int i = 0 ; i < size; i++ ) {
for ( int j = 0 ; j < size- i- 1 ; j++ ) {
if ( this . arr[ j] < this . arr[ j+ 1 ] ) {
int tmp = this . arr[ j] ;
this . arr[ j] = this . arr[ j+ 1 ] ;
this . arr[ j+ 1 ] = tmp;
}
}
}
}
public void quick ( int low, int high) {
int lo = low, hi = high;
if ( lo>= hi) {
return ;
}
boolean flag = false ;
while ( lo< hi) {
if ( this . arr[ lo] < this . arr[ hi] ) {
int tmp = this . arr[ lo] ;
this . arr[ lo] = this . arr[ hi] ;
this . arr[ hi] = tmp;
flag= ! flag;
}
if ( flag) {
lo++ ;
} else {
hi-- ;
}
}
lo-- ;
hi++ ;
quick ( low, lo) ;
quick ( hi, high) ;
}
public static void main ( String[ ] args) {
MyDemo my = new MyDemo ( 500000 ) ;
long time = System. currentTimeMillis ( ) ;
my. bobo ( ) ;
System. out. println ( System. currentTimeMillis ( ) - time) ;
}
}