算法

冒泡排序

public class BubbleSort {
    public static void main(String[] args) {
        int arr[] = {9, 5, 4, 60, 21, 3, 58};
        for (int i = arr.length - 1; i > 0; i--) {
            for (int j = 0; j < i; j++) {
                if (arr[j] > arr[j + 1]) {
                    //arr[j]和arr[j+1]交换位置
                    int temp;
                    temp = arr[j];
                    arr[j] = arr[j + 1];
                    arr[j + 1] = temp;
                }

            }

        }

        //输出结果
        for (int i = 0; i < arr.length; i++) {
            System.out.println(arr[i]);
        }
    }
}

选择排序

public class SelectSort {
    public static void main(String[] args) {
        int arr[] = {9, 5, 4, 60, 21, 3, 58};

        for (int i = 0; i <arr.length-1 ; i++) {
            //假设起点i下标的元素是最小值
            int min=i;
            for (int j = i+1; j <arr.length; j++) {
                if (arr[j]<arr[min]){
                    min=j; //更新最小元素下标
                }
            }
            if (min!=i){
                //当min和i相等,表示假设是对的,i下标元素是最小值
                //当i和min不相等时,表示猜测是错的,有比i下标元素更小的值
                int temp;
                temp=arr[min];
                arr[min]=arr[i];
                arr[i]=temp;
            }

        }

        //排序之后排列
        for (int i = 0; i <arr.length ; i++) {
            System.out.println(arr[i]);
        }
    }
}

二分查找法

public class BinarySearch {
    public static void main(String[] args) {
        int[] arr={1,2,5,30,55,66,85};
        //找出元素值为55的下标


        int index=test(arr,55);
        System.out.println("该元素下标是:"+index);
    }

    /**
     * 从数组中查找目标元素的下标
     * @param arr 被查找的数组(这个必须是已经排序过的)
     * @param dest 目标元素
     * @return -1表示该元素不存在,其他表示返回该元素的下标
     */
    private static int test(int[] arr, int dest) {
        //开始下标
        int begin=0;
        //结束下标
        int end=arr.length-1;
        //开始元素的下标只要在结束元素下标的左边,就可以循环
        while (begin<=end){
            //中间元素下标
            int mid=(begin+end)/2;
            if (arr[mid]==dest){
                return mid; //该元素的下标是
            }else if (arr[mid]<dest){
                //目标在"中间的"右边
                //开始元素下标需要发生变化(开始的下标需要重新赋值)
                begin=mid+1;
            }else {
                //arr[mid]>dest
                //目标元素在"中间"的左边
                //修改结束元素的下标
                end=mid-1;
            }
        }
        return -1;
    }
}

本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!