zoukankan      html  css  js  c++  java
  • 有序数组的并归排序--及其引出的一些知识

    面试中排序算法问到的概率太大了,虽然自己在大学学习过大多数的算法,但是感觉自己掌握的还并不是很好。

    还有就是算法的时间复杂度和空间复杂度,这是必须要掌握的知识。


    今天来总结一下归并排序算法,并且将其中的一些知识抽取出来进行总结。

    先上代码看一下把

    import java.util.Arrays;
    import java.util.Random;
    
    public class Test {
        public static void main(String[] args) {
            int[] a = suiJi();
            int[] b = suiJi();
            Arrays.sort(a);
            Arrays.sort(b);
            System.out.println(Arrays.toString(a));
            System.out.println(Arrays.toString(b));
            int[] c = heBing(a, b);
            System.out.println(Arrays.toString(c));
        }
        private static int[] heBing(int[] a, int[] b) {
            /*
             * a[1, 7, 17, 34]
             *                 j
             * b[15, 18, 19, 43, 57, 70, 83]
             *               k
             * c[1         ]
             *     i
             */
            int j=0;
            int k=0;
            int[] c = new int[a.length+b.length];
            for(int i=0;i<c.length;i++) {
                if(j == a.length) {
                    //c[i] = b[k];
                    //k++;
                    //continue;
                    System.arraycopy(
                            b,k,c,i,b.length-k);
                    break;
                }
                if(k == b.length) {
                    //c[i] = a[j];
                    //j++;
                    //continue;
                    System.arraycopy(
                            a,j,c,i,a.length-j);
                    break;
                }
                if(a[j]<b[k]) {
                    c[i] = a[j];
                    j++;
                } else {
                    c[i] = b[k];
                    k++;
                }
            }
            return c;
        }
        private static int[] suiJi() {
            int n = 5+ new Random().nextInt(6);
            int[] a = new int[n];
            for(int i=0;i<a.length;i++) {
                a[i] = new Random().nextInt(100);
            }
            return a;
        }
    }

    这段代码中用到了Arrays.sort的排序算法

      Arrays.sort并不是单一的排序,而是插入排序,快速排序,归并排序三种排序的组合

    
    

    还用到了System.arraycopy(src,scrPos,dest,destPos,length)函数 此函数有五个参数,五个参数如下所示

      src -     源数组。
      srcPos -    源数组中的起始位置。
      dest -     目标数组。
      destPos -    目标数据中的起始位置。
      length -     要复制的数组元素的数量。

      


     附一张排序算法的图

  • 相关阅读:
    Longest Palindromic Substring问题
    twosum问题
    longest substring问题
    特殊的ARP
    【转】人肉搜索技巧
    ARP攻击
    Linux kali安装及常用命令收集
    【转】ICMP协议
    SpringBoot集成Mybatis-XML方式通用Mapper
    springMVC的controller中insert()多次,记优惠券被多次领取
  • 原文地址:https://www.cnblogs.com/misscai/p/9865917.html
Copyright © 2011-2022 走看看