快速排序算法:
算法原理:
1.首先有个数组,先选出一个比较元素,然后两个索引,一个索引从头开始检索,另外一个从尾开始检索。
2.从头开始检索的索引要跟选出来的元素进行比较,如果比较小,继续检索下一个元素,如果比较大,停住,取出元素a ;
3.从尾开始检索的索引也要跟选出来的元素进行比较,如果比较大,也是继续检索下一个元素,如果比较小,停住,取出元素b ,元素 a 和 b 调换位置。
4.重复 1~3的步骤,直到 两个索引指向同一个元素,然后将比较元素的位置与两个索引所指的元素互换位置,这样的结果就会形成 比较元素左边的肯定比比较元素小,右边的肯定比比较元素要大。
5.每个元素重复1到4的步骤,完成排序。
例如:有个数组: {6,5,4,3,2,1,0,55,66,99,0},要求从小到大排序
比较元素:6
完成1~4 步骤后的排序结果为:
[0, 5, 4, 3, 2, 1, 0, 6, 66, 99, 55]
比较元素:0
[0, 5, 4, 3, 2, 1, 0, 6, 66, 99, 55]
比较元素:5
…
上代码:
public static void main(String[] args) {
int[] arrs={6,5,4,3,2,1,0,55,66,99,0} ;
sort(arrs,0,arrs.length-1) ;
for(int i=0 ; i<arrs.length ; i++){
System.out.println(arrs[i]) ;
}
}
private static void sort(int[] arrs,int left ,int right){
if(left > right){
return ;
}
int i=left ;
int j=right ;
int temp = arrs[left] ;
while(i!=j){
//必须从后开始
while(j>i&& arrs[j] >= temp){
j-- ;
}
while(j>i && arrs[i] <=temp){
i++ ;
}
if(j!=i){
arrs[i] ^= arrs[j] ;
arrs[j] ^=arrs[i] ;
arrs[i] ^=arrs[j] ;
}
}
//将对比数字与当前对比索引值互换位置
arrs[left] = arrs[i] ;
arrs[i] = temp ;
sort(arrs,left,i-1) ;
sort(arrs,i+1,right);
}