美文网首页程序员
day17_选择排序_数组的搜索算法

day17_选择排序_数组的搜索算法

作者: 雷阳洪 | 来源:发表于2019-03-05 18:30 被阅读18次

    选择排序

    规律:


    image.png
    //数组的排序操作(冒泡排序)
    class ArraySortDemo 
    {
        public static void main(String[] args) 
        {
            int[] arr = new int[]{2,9,6,7,4,1};
            ArraySortDemo.printArray(arr);//[2,9,6,7,4,1]
            selectinonSort(arr);
            ArraySortDemo.printArray(arr);//[1,2,4,6,7,9]
        }
        //选择排序
        static void selectinonSort(int[] arr)
        {
            /*
            //第一轮
            for (int i = 1;i <= arr.length - 1 ;i ++ )
            {
                if (arr[0] > arr[i])
                {
                    swap(arr,0,i);
                }
            }
            //第二轮
            for (int i = 2;i <= arr.length - 1 ;i ++ )
            {
                if (arr[1] > arr[i])
                {
                    swap(arr,1,i);
                }
            }
            //第三轮
            for (int i = 3;i <= arr.length - 1 ;i ++ )
            {
                if (arr[2] > arr[i])
                {
                    swap(arr,2,i);
                }
            }
            */
            //代码加强
            for (int j = 1;j <= arr.length - 1;j ++ )
            {
                    for (int i = j;i <= arr.length - 1 ;i ++ )
                {
                    if (arr[j - 1] > arr[i])
                    {
                        swap(arr,j - 1,i);
                    }
                }
            }   
        }
    }
        static void swap(int[] arr,int index1,int index2)
        {
            int temp = arr[index1];
            arr[index1] = arr[index2];
            arr[index2] = temp;
        }
            static void printArray(int[] arr)
        {
            //思路:先打印数组"[]",再获取arr数组里面的元素,然后再做if判断,判断如果当前i的值不是最后一个索引,则拼接
            if (arr == null)
            {
                System.out.println("null");
                return;
            }
            String ret = "[";
            for (int i = 0;i < arr.length ;i ++ )
            {
                ret = ret + arr[i];
                //如果当前i不是最后一个索引,则拼接", "
                if (i != arr.length - 1)
                {
                    ret = ret + ", ";
                }
            }
            ret = ret  +  "]";
    
            System.out.println(ret);
        }
    }
    

    数组的搜索算法之二分搜索法

    image.png
    image.png
    //二分搜索法/二分查找法/折半查找
    class BinarySeacheDemo 
    {
        public static void main(String[] args) 
        {
            int[] arr =new int []{1,2,3,4,5,6,7,8,9,10};
            int index = binarySearch(arr,8);
            System.out.println(arr[index]);
        }
        //从arr数组中搜索key的元素,找到返回其索引,否则返回-1
        static int binarySearch(int[] arr,int key)
        {
            int low = 0;//最小的索引
            int high = arr.length - 1;//最大的索引
            while (low <= high)
            {
                System.out.println(low+"----------"+high);
                int mid = (low + high) >> 1 ;//中间索引
                int midVal = arr[mid];//将中间索引的元素赋值给变量midVal
                if(midVal > key)//猜大了
                {
                    high = mid - 1;//最大的索引=中间索引-1(缩小搜索范围)
                }
                else if(midVal < key)//猜小了
                {
                    low = mid + 1;//最小的索引=中间索引+1(缩小搜索范围)
                }
                else
                {
                    return mid;//如果中间索引刚好=key值,就直接返回mid
                }
            }
            return -1;//假如说传入的元素没有在数组中,直接返回-1,表示不在该数组范围内,越界了.
        }
    }
    

    相关文章

      网友评论

        本文标题:day17_选择排序_数组的搜索算法

        本文链接:https://www.haomeiwen.com/subject/pmnnuqtx.html