package QuickPai;
public class QuickPai {
//data为操作数组,start为从左开始的数组下标,end为从右到左的下标
public void quicklist(int[]data, int start,int end) {
//上来先做判断
if(start>=end) {
return;
}
int temp;
int index=data[start];//比较样本
//start和end的值不可以改变,因为要作为下一轮递归的头和尾,所以负值i和j,让它们帮忙移动下标做判断条件
int i=start;
int j=end;
//如果i小于j,则一直寻找左边大于index的值,和右边小于index的值
while (i<j) {
//移动右边下标
while(data[j]>=index&&j>i) {
--j;
}
//当发现有data[j]<index的时候,负值给temp
temp=data[j];
//移动左边下标
while(data[i]<=index&&i<j) {
++i;
}
//交换值,大的值给右边,小的值给左边
data[j]=data[i];
data[i]=temp;
}
//当i=j时候,将data[i]或者说是data[j]的值与data[start]交换,并且进入递归
data[start]=data[j];
data[j]=index;
this.quicklist(data, start, j-1);//左边
this.quicklist(data, j+1, end);//右边
}
public static void main(String[] args) {
QuickPai qp=new QuickPai();
int []data= {7,8,4,6,3,9,10};
qp.quicklist(data, 0, data.length-1);
for (int i = 0; i < data.length; i++) {
System.out.println(data[i]);
}
}
}
最好理解的快速排序递归实现
最新推荐文章于 2021-02-28 09:51:50 发布