数组之快速排序
数组之快速排序
算法思想:
- 分治法:比大小,再分区
- 从数组中取出一个数,作为基准数。
 - 分区:将比这个数大于或等于的数全部放在它的右边,小于它的数放于左边。
 - 再对左右区间重复第二步,直到各区间只有一个数。
 
 
代码实现
package com.sun.base.Array.text;
/**
 * @Author: fei
 * @CreateTime:2020-11-26
 */
import java.util.Arrays;
public class Demo07 {
    public static void main(String[] args) {
        int[] arr = new int[]{9,-4,-9,3,5,7,77,85,98,-85};
        quickSort(arr,0,arr.length-1);
        System.out.println(Arrays.toString(arr));
    }
    //快速排序
    private static void quickSort(int[] arr,int start,int end) {
        //找出分左右两区的索引位置,然后对左右两区分别进行递归调用
        if(start<end){
            int index = getIndex(arr, start, end);
            quickSort(arr,start,index-1);
            quickSort(arr,index+1,end);
        }
    }
    private static int getIndex(int[] arr,int start,int end) {
        int i=start;
        int j=end;
        int x =arr[i];
        while (i<j){
            //由后向前找比他小的数
            while (i<j&&arr[j]>=x){
                j--;
            }
            if(i<j){
                arr[i]=arr[j];
                i++;
            }
            //由前向后找比他大的值
            while (i<j&&arr[i]<=x){
                i++;
            }
            if(i<j){
                arr[j]=arr[i];
                j--;
            }
        }
        arr[i]=x;
    return i;
    }
}
运行

                    
                
                
            
        
浙公网安备 33010602011771号