zoukankan      html  css  js  c++  java
  • 父子树递归和冒泡、快速排序

    1、递归遍历设置树结构

    // 递归遍历设置树结构
        public List<XfDictStatisticModel> buildSourceChildren(List<XfDictStatisticModel> sourceTreeList, String fatherId){
            List<XfDictStatisticModel> resultList = new ArrayList<>();
            List<XfDictStatisticModel> childrenList = sourceTreeList.stream().filter(streamSource->fatherId.equals(streamSource.getParentId())).collect(Collectors.toList());
            for(XfDictStatisticModel child : childrenList){
                child.setChildren(buildSourceChildren(sourceTreeList, child.getSourceId()));
                resultList.add(child);
            }
            return resultList;
        }

    找出第一层遍历,在内部递归,递归完了再add进集合

    2、递归找出当前节点所有子节点

    // 递归找出当前节点所有子节点
                    recursiveGetAllSons(sourceTreeList, sourceNode.getSourceId());
    
    // 递归获取某节点下的所有子节点
        public void recursiveGetAllSons(List<XfDictStatisticModel> sourceTreeList, String fatherId ){
            List<XfDictStatisticModel> childrenList = sourceTreeList.stream()
                    .filter(streamSourceTree->fatherId.equals(streamSourceTree.getParentId()))
                    .collect(Collectors.toList());
            if(childrenList != null && childrenList.size()!=0){
                this.allSonsSourceList.addAll(childrenList);
                for(XfDictStatisticModel child : childrenList){
                    recursiveGetAllSons(sourceTreeList, child.getSourceId());
                }
            }
        }
    sourceTreeList是所有值一起的数据源,不动

    3、冒泡排序
    // 指数转换成对数 2^m = n -> m = log(2)n (循环m次,每次乘以2,最后值为n)
        // 时间复杂度基本操作执行的次数
        @Test // 冒泡排序
        public void a (){
            int[] intArr = {1,9,9,5,0,1,1,3,0,9,22};
            for(int i=0; i<intArr.length-1; i++){ // 比的趟数
                for(int j=0; j<intArr.length-1-i; j++){ // 每一趟少比一个数,真正比较的操作
                    if(intArr[j]<intArr[j+1]){
                        int temp = intArr[j];
                        intArr[j] = intArr[j+1];
                        intArr[j+1] = temp;
                    }
                }
            }
            for(int a : intArr){
                System.out.print(a+",");
            }
        }

    4、快速排序
    // 快速排序
        // 获取基数索引
        private static int getPivotIndex(int[] arr, int start, int end){
            int pivot = arr[start]; // 基数值设置为第一个数
            while(start<end){
                while((start<end)&&(arr[end]>=pivot)){
                    end--;
                }
                arr[start] = arr[end];
                while((start<end)&&(arr[start]<=pivot)){
                    start++;
                }
                arr[end] = arr[start];
            }
            arr[start] = pivot; // 分两边之后基数的正确索引
            return start;
        }
    
        private static void quickSort(int[] arr, int start, int end){
            if(start<end){
                int pivotIndex = getPivotIndex(arr, start, end);
                quickSort(arr, start, pivotIndex-1);
                quickSort(arr, pivotIndex+1, end);
            }
        }
    
        @Test
        public void testQuickSort(){
            int arr[] = new int[]{3,3,3,7,9,122344,4656,34,34,4656,5,6,7,8,9,343,57765,23,12321};
            quickSort(arr,0,arr.length-1);
            for (int i:arr) {
                System.out.print(i+"	");
            }
        }


    5、
  • 相关阅读:
    学习些新东西
    浏览器内的web开发工具
    基于oracle开发的初步接触
    LAMP3 PHP安装
    svn for windows
    PHP替换掉字符串中的非字符
    搭个邮件服务器
    centos下安装mysql
    安装tomcat
    c#线程
  • 原文地址:https://www.cnblogs.com/wmqiang/p/11678205.html
Copyright © 2011-2022 走看看