多种函数排序
public class Myarray {
    public static void main(String[] args) {
        int[] arr = {5, 1, 9, 7, 2, 8, 4, 3, 6};
        for (int i = 1; i < arr.length; i++) {
            int j = i;
            int temp = arr[j];
            while (j > 0 && temp < arr[j - 1]) {
                arr[j] = arr[j - 1];
                j--;
            }
            arr[j] = temp;
        }
        printArray(arr);
        int index = halfSeek(arr,7);
        if (index == -1) {
            System.out.println("not found");
        }else {
            System.out.println(index);
        }        
    }
    /**
     * 插入排序
     * @param array
     */
    static void insertSort(int[] array) {
        //向前插入元素的前提是前面元素必须是有序的
        //从下标为1的元素开始逐一向前插入
        for (int i = 1; i < array.length; i++) {
            //把当前i的位置定位向后顶元素的坑
            int j = i;
            //从坑中把需要向插入的元素取出保存
            int temp = array[j];
            //如果向前插入的元素的值小于坑前面的值,如果j==0表示1位置就是插入元素的位置,退出循环
            while (j > 0 && temp < array[j - 1]) {
                //向后顶前面的元素
                array[j] = array[j - 1];
                //向前移坑
                j--;
            }
            //如果循环结束,当前j的位置就是要插入元素的位置
            array[j] = temp;
        }
    }
    /**
     * 折半查找
     * @param array
     * @param target
     * @return
     */
    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 {
                //不大于也不小于,代表找到目标,返回mid
                return mid;
            }
        }
        //如果循环正常结束,代表没有找到目标,返回-1
        return -1;
    }
    /**
     * 选择排序
     * @param array
     */
    static void selectionSort(int[] array) {
        for (int i = 0; i < array.length - 1; i++) {
            int minIndex = i;
            for (int j = minIndex + 1; j < array.length; j++) {
                if (array[minIndex] > array[j]) {
                    minIndex = j;
                }
            }
            if (minIndex != i) {
                int temp = array[i];
                array[i] = array[minIndex];
                array[minIndex] = temp;
            }
        }    
    }
    /**
     * 打乱数组
     * @param array
     */
    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;
        }
    }
    
    /**
     * 计算数组中最大值
     * @param array
     * @return
     */
    static int maxValueOfArray(int[] array) {
        return array[maxValueIndexOfArray(array)];
    }
    
    /**
     * 计算数组中最大值的位置
     * @param array
     * @return
     */
    static int maxValueIndexOfArray(int[] array) {
        //假定下标为0的位置是最大值的位置
        int maxIndex = 0;
        //从下标1开始向后比较
        for (int i = 1; i < array.length; i++) {
            //如果最小值下标位置的元素比当前i指向的元素小
            if (array[maxIndex] < array[i]) {
                //保存当前下标为最大值的下标
                maxIndex = i;
            }
        }
        return maxIndex;
    }
    
    /**
     * 计算数组中的最小值
     * @param array
     * @return
     */
    static int minValueOfArray(int[] array) {
        return array[minValueIndexArray(array)];
    }
    
    /**
     * 计算数组中最小值的位置
     * @param array
     * @return
     */
    static int minValueIndexArray(int[] array) {
        //假定0位最小值位置
        int minIndex = 0;
        for (int i = 1; i < array.length; i++) {
            if (array[minIndex] > array[i]) {
                minIndex = i;
            }
        }
        return minIndex;
    }
    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));
    }
}
 
                    
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号