各种排序

int[] arr = {8,9,6,5,4,7,1,2,3};
                
        selectionSort(arr);//选择
        printArray(arr);
        breakArray(arr);//打乱
        bubbleSort(arr);//冒泡
        printArray(arr);
        breakArray(arr);
        insertSort(arr);//插入
        printArray(arr);
        breakArray(arr);
        insertSort1(arr);//插入另一种
        printArray(arr);

   breakArray(arr);

   quickSort(arr, 0 ,arr.length - 1);//快速排序
        printArray(arr);          
    }    
    


     // 单次快速排序
    
    static void quickSort(int[] array, int s, int e) {
        if (s >= e) {   //出口
            return;
        }
        int start = s;    //  =0
        int end = e;// = array.length - 1
        //把头部的第一个值作为基准值
        int temp = array[start];
        
        while (start < end) {
            //从尾部找比基准值小的
            while (start < end && temp < array[end]) {
                end--;
            }
            //把比基准值小的保存到头部
            if (start < end) {
                array[start] = array[end];
//                printArray(array);//输出基准值左边的过程
                start++;                
            }
            //从头部找比基准值大的
            while (start < end && temp > array[start]) {
                start++;
            }
            //把比基准值大的保存到尾部
            if (start < end) {                
                array[end] = array[start];
//                printArray(array);//输出基准值右边的过程
                end--;
            }
        }
        //头部跟尾部重合,找到基准值的位置        
        //start == end
        array[start] = temp;
        //头部数组递归调用
        quickSort(array, s, start - 1);
        quickSort(array , s + 1, e);
    }


    //插入排序
    static void insertSort(int[] array){
        for (int i = 1; i < array.length; i++) {
            int j = i;
            int temp = array[j];
            while (j > 0 && temp < array[j - 1]) {
                array[j] = array[j - 1];
                j--;                
            }
            array[j] = temp;
        }
    }
    
    //插入排序1
    static void insertSort1(int[] array) {
        for (int i = 1; i < array.length; i++) {
            int j = i;
            int temp = array[j];
            while (j > 0 && temp < array[j - 1]) {
                array[j] = array[j - 1];
                j--;
            }
            array[j] = temp;
        }
    }

    //折半查找
    static int halfSeek(int[] array, int target) {
        int start = 0;
        int end = array.length - 1;
        while (start <= end) {
            int mid = (start + end) / 2;
            if (array[mid] > target) {
                end = mid - 1;
            }else if (array[mid] < target) {
                start = mid + 1;
            }else {
                return mid;
            }
        }
        return -1;
    }
    
    //选择排序
    static void selectionSort(int[] array) {
        for (int i = 0; i < array.length - 1; i++) {
            int midIndex = i;
            for (int j = midIndex + 1; j < array.length; j++) {
                if (array[midIndex] > array[j]) {
                    midIndex = j;
                }
            }
            if (midIndex != i) {
                int temp = array[i];
                array[i] = array[midIndex];
                array[midIndex] = temp;
            }
        }
    }
    
    //打乱数组
    static void breakArray(int[] array) {
        for (int i = array.length - 1; i >= 0; i--) {
            int r = (int)(Math.random() * (i + 1));
            
            int temp = array[r];
            array[r] = array[i];
            array[i] = temp;
        }
    }
    
    //冒泡排序
    static void bubbleSort(int[] array) {
        boolean flag = false;
        int iMax = array.length - 1;
        for (int i = 0; i < iMax; i++) {
            flag = true;
            for (int j = 0; j < iMax - i; j++) {
                if (array[j] > array[j + 1]) {
                    int temp = array[j];
                    array[j] = array[j + 1];
                    array[j + 1] = temp;
                    
                    flag = false;
                }
            }
        }
    }
    
    //输出的格式
    static String array2String(int[] array) {
        if (array == null) {
            return "null";
        }
        
        int iMax = array.length - 1;
        if (iMax == -1) {
            return "[]";
        }
        StringBuilder s = new StringBuilder();
        s.append("[");
        for (int i = 0; ; i++) {
            s.append(array[i]);
            if (i == iMax) {
                return s.append("]").toString();
            }
            s.append(", ");
            
        }
    }
    //输出
    static void printArray(int[] array) {
        System.out.println(array2String(array));

posted on 2019-02-19 21:31  T-T-T  阅读(130)  评论(0)    收藏  举报

导航