排序算法快速排序

思路:

1.定义一个partition(这利用最简单的:数组的第一个数)

先从右往左找,找到第一个比partition小的数,放在low这个位置(由于此时low这个地方的数已经保存在partition中了,所以不会丢失)

然后从左往右找,找到第一个比partition大的数,将其放于high此时的位置(high已经被放入了先前low的位置)

然后将partition放入相遇点 left&right

直到left与right相遇,此时已经完成了一次划分,low-left&right-high,且左边都是比partition小的数,右边都是比它大的数,那么,后续只需递归调用sort即可:

sort(low,left-1);

sort(left+1,high);

public class QuickSort {

    public void sort(int[] a, int low, int high){
        if(low>=high){
            return;
        }
        int partition = a[low];
        int left = low, right =  high;
        while(left < right){
            while(left<right && a[right] >= partition){
                right--;
            }
            if(left<right){
                a[left] = a[right];
            }
            while(left<right && a[left] <= partition){
                left++;
            }
            if(left<right){
                a[right] = a[left];
            }
        }
        a[left] = partition;
        sort(a,low,left-1);
        sort(a,left+1,high);
    }
    @Test
    public void test(){
        int[] a = {1,2,5,8,3,4,6,9,7};
        sort(a,0,a.length-1);
        System.out.println(Arrays.toString(a));
    }

}
原文地址:https://www.cnblogs.com/wsZzz1997/p/14731521.html