正如名字所示,快速排序是一种快速高效的排序算法。
快速排序原理:
从数组a等要排列的数量中选择中心值key,将数组a按一次排序分为两部分。 其中,以key为中心,key的右侧大于key,key的左侧小于key。 然后,对这两个部分分别重复这个过程,直到有序为止。
整个排序过程简化为一次排序过程,递归调用就可以了。
排序方法:
定义1,i=0,j=A.lenght-1,I是第一个数的下标,j是最后一个数的下标
2 )从数组的最后几个Aj开始从右向左搜索,首先找到小于key的数,标记为Aj
3、从数组的第一个数Ai开始从左向右搜索,找到比第一个key大的数,记为Ai
4、更换Ai和Aj
5,重复这个过程直到i=j
6 )调整钥匙的位置,更换A[i]和钥匙
将排列的排列设为A[8]={ 5 2 8 9 2 3 4 9 }
选择key=5,开始时i=0,j=7
索引0123456 7
开始: 5 2 8 9 2 3 4 9
i j
第一次找5 2 8 9 2 3 4 9
i j
更换:5 2 4 9 2 3 8 9
i j
寻找第二次的5 2 4 9 2 3 8 9
i j
更换:5 2 4 3 2 9 8 9
i j
第三次找5 2 4 3 2 9 8 9
ij
调整关键:25435989
ij
以下为代码:
package com.quicksort;
import java.util.Arrays;
公共类快速排序{
publicstaticvoidmain (字符串[ ] args ) {
int [ ] a={ 1,2,4,5,7,4,5,3,9,0 };
系统. out.println (arrays.tostring (a ) );
快速排序(a;
系统. out.println (arrays.tostring (a ) );
}
公共服务语音quicksort (int [ ] a ) {
if(a.Length0) {
快速排序(a,0,a.length-1 );
}
}
私有状态语音quicksort (int [ ] a,int low,int high ) {
//1,找到递归算法的出口
if (低高度) {
返回;
}
//2,存起来
int i=low;
int j=high;
//3,密钥
int key=a[ low ];
//4,排序一次
wile(Ij ) {
//4.1,从右向左找到小于第一个密钥的数量
while(Ikey ) {
j----;
}
//4.2从左向右找到大于第一个key的数
wile(I
I;
}
//4.3更换
if(I )
int p=a[i];
a[i]=a[j];
a[j]=p;
}
}
//4.4,调整密钥位置
int p=a[i];
a[i]=a[low];
a[low]=p;
//5,如果快的话
快速排序(a,low,i-1 );
//6,在key右侧的列中
快速排序(a,i 1,high );
}
}
-----------------
作者: ye小芬
来源: CSDN
译文: 3359 blog.csdn.net/ye xiaofen/article/details/78018204
声明:本文为博客原创文章。 转载请附上博文链接!