分析:
1、以最后一个值作为基准值
2、从前往后直到倒数第二个停下
3、比基准值小的从首位开始往后互相交换(比如第一个比基准值小的元素将它的位置与第一个位置交换),比基准值大的
原位暂时不动,往后找,知道完成;
4、例子,如图
1>4为基准值,2比4小,将2与首位的值相互交换
2>8比4大,不动,往后找
3>7比4大,不动,往后找
4>1比4小,将1与第二个位置相互交换
5>3比4小,将3与第三个位置相互交换,以此类推,直到倒数第二个
6>将4位置与i交换(设比基准值小的元素位置已经排到i位)
代码实现:
package work9.Quicksort;
class sort{
int[] tem=new int[10];
sort(int[] tem) {//构造函数,参数为整形数组;
this.tem=tem;
}
void sortloop(int[] num,int p,int r) { //递归循环
if(p<r) {
int q=exchange(num,p,r);//q用来得到各个子部分的首部或尾部元素下标;
sortloop(num,p,q-1);
sortloop(num,q+1,r);
}
}
public int exchange(int[] num,int p,int r) {//
int i=p-1;//i=-1
for(int j=i+1;j<r;j++) {//注意:j=i+1非0,分为两组后,第二组j从p开始不是从0开始;
if(num[j]<num[r]) {
i++;
swap(num,i,j);
}
}
i++;
swap(num,i,r);
return i;
}
public void swap(int[] num,int a,int b) {
int tm;
tm=num[a];
num[a]=num[b];
num[b]=tm;
}
}
public class main {
public static void main(String[] args) {
int[] num=new int[] {4,8,9,6,5,1,2,3};
sort lw=new sort(num);
lw.sortloop(num, 0,num.length-1);
for(int i=0;i<num.length;i++)
System.out.print(num[i]);
}
}