三种数组排序算法(冒泡排序、选择排序、插入排序、二分查找法)

三种数组排序算法(冒泡排序、选择排序、插入排序、二分查找法)

冒泡法排序(BubbleSort)

特点: 两两相邻比较

int[] arr = new int[]{1,7,2,5,4,8,6,9,10,3};
    for(int i = 0;  i < arr.length; i++){   // 升序
        for(int j = 0; j < arr.length - i -1; j++ ){
            if(arr[j] > arr[j+1]){
                int temp = arr[j];
                arr[j] = arr[j+1];
                arr[j+1] = temp;
            }
        }
    }

选择排序(ChoiceSort)

特点:查找出最小值记录其下标,一次循环之后,将其与前面的元素交换值;

int k = 0,min;
    int[] arr = new int[]{1,7,2,5,4,8,6,9,10,3};
    for(int i = 0;  i < arr.length - 1; i++){  
        min = arr[i];
        for(int j = i + 1; j < arr.length; j++ ){
            if(min > arr[j]){
                k = j;
                min = arr[j];
            }
        }
        int temp = arr[i];
        arr[i] = arr[k];
        arr[k] = temp;
    }

插入排序(InsertSort)

特点:将后面的数与前面的数比较大小并转换值;

int[] arr = new int[]{1,7,2,5,4,8,6,9,10,3};
    for(int i = 1;  i < arr.length - 1; i++){  
        for(int j = 0; j < i; j++ ){
            if(arr[i] < arr[j]){
                int temp = arr[j];
                arr[j] = arr[i];
                arr[i] = temp;
            }
        }
    }

二分查找法(BinarySort)

前提:在已排序的数组中进行查找
特点:从中间开始对数组进行查找,如果N小于中间数,则对左半部分进行查找,如果N大于中间数,则对右半部分进行查找直到找到元素

int n = (int) (Math.random() * 20 + 1);     // 1-100的随机数
        boolean b = false;
        int[] arr = new int[]{1,7,2,5,4,8,6,9,10,3};
        Arrays.sort(arr);   // 先对数组进行排序
        int first = 0,last = arr.length - 1,mid = arr.length / 2;
        while(first <= last){
            if(n == arr[mid]){
                b = true;
                break;
            }else if(n > arr[mid]){
                first = mid + 1;
            }else if(n < arr[mid]){
                last = mid - 1; 
            }
            mid = (first + last) / 2; 
        }
        if(b){
            System.out.print("查找成功!\n数组的下标为: " + mid );
        }else{
            System.out.print("查找失败!");
        }

可使用: java.util.Arrays类中的BinarySearch方法 Arrays.binarySearch(arr,n); // 返回数组下标

你可能感兴趣的:(java基础)