java基础(6)java数组常用算法

一、选择排序(升序)

原理:选择一个位置(一般拿数组的第一个元素),拿这个位置上的值不断和其他位置的值进行比较。

将最小的元素交换至左侧,每一轮比较的次数,比上一轮少一次

《java基础(6)java数组常用算法》

 

class Demo_Selection_Sort 
{
    public static void main(String[] args) 
    {
        /*
            已知一个无序数组 将数组进行从小到大 升序排序 
            常见算法1
                选择排序
        */
        int[] arr = {3,1,4,2,7,5}; //1,2,3,4,5,7
        for(int i=0;i<arr.length-1;i++){//外层循环-1 因为循环最后一次 5角标和5角标的值自己比自己 没意义
            for(int j=i+1;j<arr.length;j++){ 
                if(arr[i]>arr[j]){
                    int temp = arr[i];
                    arr[i] = arr[j];
                    arr[j] = temp;
                }
            }
        }
        //遍历数组
        for(int i=0;i<arr.length;i++){
            System.out.println(arr[i]);
        }
    }
}
 

二、冒泡排序(升序)

原理:相邻的两个元素之间进行两两比较,大的先出现在右侧

《java基础(6)java数组常用算法》

例子:

class Demo_Bubble_Sort 
{
    public static void main(String[] args) 
    {
        //算法2 冒泡排序 从小到大 升序
        int[] arr = {3,4,2,5,1};

        for(int i=0;i<arr.length-1;i++){//如果剩下最后一个元素了 还能相邻吗 不能 所以-1
            for(int j=0;j<arr.length-i-1;j++){//-i 每一轮比较后 大的值跑到右侧 参与比较的元素 少一个
                if(arr[j]>arr[j+1]){         //-1 当j=4 4+1就越界了 所以-1
                    int 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]);
        }
    }
}
 

三、二分查表法(折半查找)

和顺序查找一样,功能都是根据元素查找角标

根据元素 查找元素在当前数组中第一次出现的位置

找到了 返回对应索引

找不到 返回-1

前提:必须是有序数组

《java基础(6)java数组常用算法》

例子:

class Demo_Array_Selection 
{
    //算法 3 二分查表法 查询指定元素 的索引 有就返回 没有就返回-1
    public static void main(String[] args) 
    {
        int[] arr = {10,2,4,7,19,8};
        //二分查找法有前提 必须是有序数组
        print(arr); //遍历 排序前
        sort(arr); //排序
        print(arr); //遍历 排序后
        
        //调用二分法 查找10 在数组中第一次出现的位置
        int index = findIndex(arr,10);
        System.out.println(index);
    }
    /*
        二分查找法 方法抽取
        1.方法名 findIndex
        2.参数列表 数组 值
        3.返回值类型 int 角标
    */
    public static int findIndex(int[] arr,int value){
        int start = 0;//初始起点
        int end = arr.length-1; //初始终点 最大角标
        int middle = (start+end)/2; //初始中间点角标

        while(arr[middle]!=value){
            if(value>arr[middle]){
                start = middle + 1;
            }else if(value<arr[middle]){
                end = middle – 1;
            }

            if(start>end){
                return -1;
            }

            middle = (start+end)/2;
        }
        return middle;
    }
    //遍历数组
    public static void print(int[] arr){
        for(int i=0;i<arr.length;i++){
            System.out.print(arr[i]+” “);
        }
        System.out.println();
    }
    //冒泡排序
    public static void sort(int[] arr){
        for(int i=0;i<arr.length-1;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;
                }
            }
        }
    }
}
 

 

    原文作者:五大常用算法
    原文地址: https://blog.csdn.net/weixin_42496678/article/details/81115741
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞