快速排序

思路:

1、从最右端开始找出小于基准数的数以及其位置

2、从最左端出发找出大于其基准数的数以及其位置

3、交换两个数

4、交换基准数跟碰头数(最右端开始向前的标记等于最右端向后的标记)

5、处理数组中所有小于基准数的数字

7、处理数组中所有大于基准数的数字

package DataStruct.Sort;

import java.util.Arrays;

public class QuickSort {
    public static void main(String[] args)
    {
        int arr[]=new int[]{-1,-2,-4,1,2,0,9};
        quickSort(arr,0,arr.length-1);
        System.out.println(Arrays.toString(arr));
    }
    public static  void quickSort(int []arr,int start,int end)
    {
        if (start<end)
        {
            //将数组中start位置(刚开始标准数位置为0)元素作为标准数
            int stard=arr[start];
            //记录需要排序的下标
            int low=start;
            int high=end;
            //找出比标准数大或小的数
            while(low<high)
            {
                //从最右端开始找出小于基准数stard的数以及其所在位置high
                while (low<high&&stard<=arr[high])
                {
                    high--;
                }
                //从最左端开始找出大于基准数stard的数以及其所在位置low
                while (low<high&&arr[low]<=stard)
                {
                    low++;
                }
                //交换low跟high两个数
                if (low<high)
                {
                    int temp=arr[low];
                    arr[low]=arr[high];
                    arr[high]=temp;
                }

            }
            //交换基准数跟碰头数(low=high时的数)
            arr[start]=arr[low];
            arr[low]=stard;
            //处理所有比标准数小的数字
            quickSort(arr,start,low);
            //处理所有比标准数大的数字
            quickSort(arr,low+1,end);
        }

    }

}

 

posted @ 2019-04-21 21:26  Dloading  阅读(173)  评论(0编辑  收藏  举报