zoukankan      html  css  js  c++  java
  • java 面试算法题

    /**
         * 设有n个人依围成一圈,从第1个人开始报数,数到第m个人出列,然后从
         * 出列的下一个人开始报数,数到第m个人又出列,…,如此反复到所有的人全部出列为
         * 止。设n个人的编号分别为1,2,…,n,打印出出列的顺序;要求用java 实现。
         */
        @org.junit.Test
        public void test3() {
            //初始化整个队伍
            int[] peos = new int[9];
            for (int i = 1; i < peos.length+1; i++) {
                peos[i-1] = i;
            }
            System.out.println(Arrays.toString(peos));
            //出队步长
            int m = 2;
    
            //出队记录
            int[] out = new int[9];
    
            int n = 0;
            for (int i = 0; peos.length != 0; i++) {
                //每次出队时,当前序号。
                n = m + n - 1;
                while (n >= peos.length) {
                    // 如果n下标超过数组长度,就从头开始再算。
                    n = n - peos.length;
                }
                out[i] = peos[n];
                /*
                 * 将数组n项后面的元素全部前移一项。可以替换为System.arraycopy方法。
                 * System.arraycopy(peos, n + 1, peos, n, peos.length - 1 - n);
    * 生成出队后的新数组 */ for (int j = n; j < peos.length - 1; j++) { peos[j] = peos[j + 1]; } peos = Arrays.copyOf(peos, peos.length - 1); } System.out.println(Arrays.toString(out)); }

      

    /**
         * 插入排序原理参照扑克牌,每一次取出一张牌,设为Ai ,插入到应该在的顺序里,并不需要新建一个新的数组。
         * 从数组第二个元素开始,将Ai 与前面的元素(已经排序的i个元素)比较,
         * 如果是升序,则应该找到Ai首次遇到大于自己的元素的位置,设为j,Ai排序本次循环后应该位于j处,
         * 而从j到i-1的所有元素向后移动一位,填补原先Ai(i)的地方,Ai的值插入到移位后空出来的j(处)
         * 这样实现了从i处抽取一个牌,插入到准确的位置。依次循环这个过程,循环到的每一个元素最后都会插入到它应该所处的位置上,从而实现了排序。
         * [1, 2, 4, 5, 6, 7, 9, 3, 8]
         * [1, 2, 3, 4, 5, 6, 7, 9, 8]
         * @param array
         * @param up
         */
        public static void insertSort(int[] array ,boolean up){
            for(int i=1;i<array.length;i++){
                int current = array[i];
                int from=0,to=i-1;
                for(int j=from;j<=to;j++){
                    if(current <= array[j]){
                        for(int n=to;n>=j;n--){
                            array[n+1] = array[n];
                        }
                        array[j] = current;
                        break;
                    }
                }
                System.out.println(Arrays.toString(array));
            }
        }
    

      

    /**
     * 冒泡排序
    * 选择第一个元素,依次与后面的元素比较,如果大于后面的元素就交换,一轮下来,保证最大的元素放在最后面。 * 循环这个过程 */ public static void maoPaoSort(int[] array ,boolean up){ if(up){ for(int j = 0;j<array.length-1;j++){ int current = array[0]; for(int i=0;i< array.length-j-1;i++){ if(current> array[i+1]){ array[i]= array[i+1]; array[i+1]=current; }else if(current< array[i+1]){ current = array[i+1]; } } } }else{ for(int j = 0;j<array.length-1;j++){ int current = array[0]; for(int i=0;i< array.length-j-1;i++){ if(current < array[i+1]){ array[i]= array[i+1]; array[i+1]=current; }else if(current > array[i+1]){ current = array[i+1]; } } } } System.out.println(Arrays.toString(array)); }

      

  • 相关阅读:
    C语言利用fgetc复制拷贝文件内容
    linux 安装gcc 和 g++
    C宏定义和使用
    C的realloc的动态分配扩展和缩小内存
    C用malloc 向系统申请一个大小为n*4个字节的内存块
    GDB core命令的使用调试段错误
    GDB的安装
    C字符指针数组的使用
    C二维字符数组的使用及如何获取二维数组的总行数和总列数!
    C二维数组用指针地址遍历
  • 原文地址:https://www.cnblogs.com/opensesame/p/6406691.html
Copyright © 2011-2022 走看看