package Sort;
import java.util.Arrays;
public class QuickSort {
public static void main(String[] args) {
int[] a = {3,6,1,2,4,8,9};
QuickSort qs = new QuickSort();
a = qs.quicksort(a,7);
System.out.println(Arrays.toString(a));
}
public int[] quicksort(int[] A,int n){
doQuickSort(A,0,n-1);
return A;
}
private void doQuickSort(int[] a, int start, int end) {
if(start==end)
return;
int index = partition(a, start, end);
if(index>start) //先排左边
doQuickSort(a,start,index);
if(index<end-1) //再排右边
doQuickSort(a,index+1,end);
}
int partition(int a[],int start,int end){
//把需要找到其在数组中确定位置的元素称为目标值,并且每次取数组中的第一个位置的元素作为目标值
int index = start;
int small = start - 1;//记录的永远是第一个比目标值大的元素位置的下标减一位置,即前一个位置
//选取每次数组的第一个元素作为目标值,找到其在数组中的对应位置
//首先将目标值交换到数组最后一个元素位置,方便后来进行循环比较
swap(a,start,end);
for(;index<end;index++){
if(a[index]<a[end]){
small++;
if(small!=index){ //此时说明,index位置的元素值比目标值要小,且small比index要小,说明此时small位置的元素比目标值要大,
//所以交换这两个位置的元素值,交换后,small位置处的元素仍然是小于目标值的
swap(a,small,index);
}
}
}
//循环结束后,end位置的元素应该出现的位置即为++small
++small;
swap(a,small,end);
return small;
}
private void swap(int[] a, int start, int end) {
// TODO Auto-generated method stub
if(start==end)
return;
a[start] = a[start] + a[end];
a[end] = a[start] - a[end];
a[start] = a[start] - a[end];
}
}
数据结构之——快速排序
最新推荐文章于 2020-09-18 21:19:20 发布