java数组练习二(1、数组冒泡排序;2、二分查找指定元素;3、顺序查找指定元素;4、检查数组的有序性)

数组排序(冒泡排序)

基本思想:
以升序数组为例,每次将两个相邻的元素进行比较,将小的元素调到前面,反复进行比较,直至最后的元素。第一次找出最大的元素,第二次找出第二大的元素…最后一次找出最小的元素。

import java.util.Arrays;
public class Test {
    public static void main(String[] args) {
        int[] arr={1,9,2,8,3,7,4,6,5};
        System.out.println(Arrays.toString(bubbleSort(arr)));
    }
    public static int[] bubbleSort(int[] a){
        for(int i=0;i<a.length;i++){
            for(int j=0;j<a.length-1-i;j++){
                if(a[j]>a[j+1]){
                    int temp=a[j];
                    a[j]=a[j+1];
                    a[j+1]=temp;
                }
            }
        }
        return a;
    }
}

查找数组中指定元素(二分查找)

要求
数组为有序数组。
基本思想:
假设数据是按升序排列,对于要查找的值X,从中间位置开始比较。
(1)若X等于中间值,则查找成功;
(2)若X小于中间值,则在数组前半部分查找;
(3)若X大于中间值,则在数组后半部分查找,直到找到或无相应的值为止。

public class Test {
    public static void main(String[] args) {
        int[] arr={1,2,3,4,5,6,7,8,9};
        int ret=binarySearch(arr,8);
        System.out.println(ret);
    }
    public static int binarySearch(int[] a,int k){
        int left=0;
        int right=a.length-1;
        while(left<=right){
            int mid=(left+right)>>1;
            if(k<a[mid]){
                right=a[mid]-1;
            }
            else if(k>a[mid]){
                left=a[mid]+1;
            }
            else{
                return mid;
            }
        }
        return -1;
    }
}

查找数组中指定元素(顺序查找)

问题描述:在数组中查找指定元素,若找到指定元素,则返回下标值,否则返回-1。

public class Test {
    public static void main(String[] args) {
        int[] arr={1,9,2,8,3,7,4,6,5};
        System.out.println(find(arr,6));
    }
    public static int find(int[] a,int k){
        for(int i=0;i<a.length;i++){
            if(a[i]==k){
                return i;
            }
        }
        return -1;
    }
}

检查数组的有序性

问题描述:给定一个整型数组, 判断该数组是否是有序的。

public class Test {
    public static void main(String[] args) {
        int[] arr={1,2,3,4,5,6,7,8,9};
        System.out.println(isSorted(arr));
    }
    public static boolean isSorted(int[] a){
        for(int i=0;i<a.length-1;i++){
            if(a[i]>a[i+1]){
                return false;
            }
        }
        return true;
    }
}
发布了75 篇原创文章 · 获赞 14 · 访问量 1925

猜你喜欢

转载自blog.csdn.net/qq_45328505/article/details/104247756