zoukankan      html  css  js  c++  java
  • 数组算法

    冒泡算法

    原理:

    通过数组相邻两个数比较大小,得到左小右大的排序。循环以上操作,将获得一个数组的最大数,并在数组最大索引处。

    因为已经获得了最大数,下次循环次数-1,以此类推直至排序完。

    代码实现:

    private static void bubleSort(int[] arr) {
            int js=arr.length-1;
            int tmp;
            for (int i = 0; i < js; i++) {
                for (int j = 0; j < js; j++) {
                    if(arr[j]>arr[j+1]){
                        tmp=arr[j];
                        arr[j]=arr[j+1];
                        arr[j+1]=tmp;
                    }
                }
                js--;
            }
        }
    

    二分法查找

    目的:在数组中查找一个数字的索引。

    使用要求:基于排序,按照大到小,或小到大都可以。

    原理:

    获取数组中间索引的数组值,然后与要查找的数字进行比较,只有三种结果>、=、<,进行不同的判断返回结果

    代码实现:

    private static int binarySearch(int[] arr, int num) {
            int max=arr.length;
            int min=0;
            int tmp = 0;
            if(max<min){
                return -1;
            }
            for (int i = 0; i < arr.length; i++) {
                tmp=(max+min)/2;
                if(arr[tmp]>num)
                    max=tmp;
                else if(arr[tmp]<num)
                    min=tmp;
                else
                    return tmp;
            }
            return tmp;
        }
    

    快排法

    目的:在数组中,规则排序。

    原理:

    1. 将数组一号元素定位基准
    2. 从最后一位元素开始于第一位元素尽心大小比较,查找比标准小的元素,找到一个后停止寻找。
    3. 从第二位元素开始寻找比基准大的元素,找到一个后停止寻找,再将第二步找到的元素与这个元素位置交换。
    4. 重复第二步和三步操作,直至两者索引相同。

    此时获得的数组,相同的索引左边都比中间索引的值小,索引右边都比中间索引的值大。可通过递归实现后面数据排序操作。中间索引左边的数据再次重复1234补,数组右边同理。

    代码实现:

    private static void quickSort(int[] arr, int left, int right) {
            if(left>right){
                return;
            }
            int start=left;
            int end=right;
            int jl=arr[start];
            while(left!=right){
                while (arr[right]>=jl&&right>left){
                    right--;
                }
                while(arr[left]<=jl&&right>left){
                    left++;
                }
                int tmp=arr[left];
                arr[left]=arr[right];
                arr[right]=tmp;
            }
            arr[start]=arr[right];
            arr[right]=jl;
    
    
            quickSort(arr,start,left-1);
            quickSort(arr,left+1,end);
        }
    

    谢谢观看,如发现错误优化,请指正谢谢,祝您学有所成。

  • 相关阅读:
    第二高的薪水
    leecode 删除排序数组中的重复项
    leecode 17. 电话号码的字母组合
    dubbo 限流之TpsLimitFilter
    G1总结
    leecode 3. 无重复字符的最长子串
    mysql是如何解决脏读、不可重复读、幻读?
    归并排序
    PostgreSQL管理数据库安全
    Oracle Database 19c 技术架构(三)
  • 原文地址:https://www.cnblogs.com/theStone/p/14071422.html
Copyright © 2011-2022 走看看