美文网首页Java程序栈
冒泡排序、选择排序和二分查找算法

冒泡排序、选择排序和二分查找算法

作者: 一直想上树的猪 | 来源:发表于2018-12-04 00:08 被阅读1次

    冒泡排序

    思路:


    冒泡排序的思路

    代码实现:

    public static void bubbleBetterSort(int[] array){
            int len = array.length;
            //int counter = 0;
            //外层控制趟数
            for(int i=0;i<len-1;i++){
                //counter ++;
                //内层控制本趟的相邻元素的逐个比较
                boolean flag = false;
                for(int j=0;j<len-i-1;j++){
                    if(array[j] > array[j+1]){
                        //交换
                        int temp = array[j];
                        array[j] = array[j+1];
                        array[j+1] = temp;
                        flag = true;
                    }
                }
                if(!flag){
                    break;
                }
            }
            //p("counter = "+counter , true);
        }
    

    选择排序

    算法思想:从待排序的数组中选择一个最小的元素,将它与数组的第一个位置的元素交换位置。然后从剩下的元素中选择一个最小的元素,将它与第二个位置的元素交换位置,如果最小元素就是该位置的元素,就将它和自身交换位置,依次类推,直到排序完成。


    选择排序算法思路

    代码实现:

    public static void selectSort(int[] array){
            int len = array.length;
            for(int i=0;i<len-1;i++){
                int min = i;//最小值下标
                for(int j = i+1;j<len;j++){
                    if(array[j]<array[min]){
                        min = j;
                    }
                }
                //i当前的值,代表着待排序部分的第一个元素
                int temp = array[i];
                array[i] = array[min];
                array[min] = temp;
            }
        }
    

    二分查找

    算法思路:通过每次循环,重新确定查找的区间范围,不停的缩减范围,直到找到最后的数据。

    public static int myBinarySearch(int[] array, int key){
            int len = array.length;
            int insertIndex = len>>1;
            
            final int firstInsertIndex = insertIndex;
            
            int startIndex = 0;//查找的开始索引
            int endIndex = len-1;//查找的结束索引。
            int counter = 0;
            while(endIndex >= startIndex){
                counter ++;
                if(array[insertIndex] > key){
                    endIndex = insertIndex - 1;
                }else if(array[insertIndex] < key){
                    startIndex = insertIndex + 1;
                }else{
                    System.out.println("counter = "+counter);
                    return insertIndex;
                }
                //first
                insertIndex = (endIndex-startIndex) /2 + startIndex;
            }
            System.out.println("counter = "+counter);
            return - firstInsertIndex - 1;
        }
    

    相关文章

      网友评论

        本文标题:冒泡排序、选择排序和二分查找算法

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