zoukankan      html  css  js  c++  java
  • 【查询算法】线性查询,二分法查询,冒泡排序,快速排序

    // 按顺序比较大小
    
    public class equals_线性查询 {
    
        public static void main(String[] args) {
    
    
            String[] arr = new String[]{"AA", "BB", "CC", "DD", "FF"};
            String dest = "BB";
    
            for (int i = 0; i < arr.length; i++){
                if (dest.equals(arr[i])){
                    System.out.println("元素的索引是" + i);
                    System.out.println(dest.equals(arr[i]));
                    break;
                }
            }
    
    
    
        }
    }
    // 前提: 必须是有序数组  优势:快
    
    public class 二分法查找 {
        public static void main(String [] args){
    
            int[] arr = new int[]{-98,-34,2,34,54,66,79,105,210,333};
            int dest = -34;
    
            int head = 0;  // 初始的首索引
            int end = arr.length - 1; // 末索引
            
            // 对半比较 
            while (head <= end ){
                int middle = (head + end) / 2;
    
                if (dest == arr[middle]){
                    System.out.println("元素的索引是" + middle);
                    break;
                }
                else if( arr[middle] > dest ){
                    end = middle - 1;
                }else {
                    head = middle + 1;
                }
            }
    
        }
    }
     
    // 循环遍历判断两个相邻的数值,大小调换位置
    
    public class 冒泡排序 {
        public static void main(String[] args) {
    
            int[] arr = new int[]{98, 34, 2, 34, 54, 66, 79, 105, 210, 333};
    
            // 冒泡排序
            for (int i = 0; i < arr.length - 1; i++) {
                for (int j = 0; j < arr.length - 1;j++ ){
                    // 如果后面一个数 大于 前面一个数 就调换位置
                    if (arr[j] > arr[j+1]){
                        int temp = arr[j];
                        arr[i] = arr[j+1];
                        arr[j+1] = temp;
                    }
                }
            }
    
            // 显示重置后的
            for (int x : arr) {
                System.out.println(x);
            }
    
        }
    }
    
    //  输出:
    //  79
    //  98
    //  98
    //  98
    //  98
    //  98
    //  98
    //  105
    //  210
    //  333

     
    // 快速排序
    
    /*
        每次循环都会是以1 2 4 8。。。 的比例进行重组排序
    
        说明:
            1:循环取数组第一个值(Pivot),
            2:定义两个指针,一个在第一个值的后面(low),另外一个是最尾巴的数值(high)
            3:接着类似于 low向尾巴移动,high向头移动, 在移动中,只要满足low 大于 Pivot 并且 high 小于 Pivot 的两个数就调换位置
            4:当停止时,相当于high与low的位置相邻,判断 如果high 小于 Pivot的值,就调换两个位置
            5:这个时候会发现,左边都是小于Pivot的,右边都是大于Pivot的
            6:针对左右两个数组进行一次 1~5的步骤
    
     */


     
  • 相关阅读:
    Windows下载Vim
    分享:分享几个程序员使用的网站
    分享:C语言大礼包(PDF)
    将vscode打造成强大的C/C++ IDE
    最适合做C/C++开发的IDE
    bzoj 2244
    bzoj 1492
    bzoj 3262
    bzoj 1176
    bzoj 2961
  • 原文地址:https://www.cnblogs.com/wanghong1994/p/14107331.html
Copyright © 2011-2022 走看看