zoukankan      html  css  js  c++  java
  • 算法:一个排序(第一个最大,第二个最小,第三个其次大,第四其次小...)

    2008-11-02 11:06

    算法:一个排序(第一个最大,第二个最小,第三个其次大,第四其次小...)

    问题:一组数字:21,25,11,32,12,35,55,77,66,写程序按照下面排序。(第1个数最大,第2个数最小,第3个数是剩下数中最大的,第4个是剩下数中最小的。。。)

    思路:先排序,然后在建立一个相同大小的数组,按照某种顺序复制过来

    代码:

    import java.util.Arrays;

    public class Test {
        public static void main(String[] args) {
            int[] a = new int[]{21,25,11,32,12,35,55,77,66};
            insertSort(a);
            a = sort(a);
           
            for (int i : a)
                System.out.print(i + " ");
        }
       
        /**
         * 排序
         * @param a
         * @return
         */
        private static int[] sort(int[] a) {
            //复制一个数组,和要排序的一样大小
            int[] aCopy = new int[a.length];
            //两个指针,先取左边的(left),left++,然后取右边(right)的,right++,反复,就得到题目的顺序
            int left = 0;
            int right = a.length - 1;
            int index = 0;
            while (left <= right) {
                if (index % 2 == 0) {
                    aCopy[index] = a[left];
                    left++;
                } else {
                    aCopy[index] = a[right];
                    right--;
                }
                index++;
            }
            return aCopy;
        }
       
        /**
         * 插入排序
         * 77 66 55 35 32 25 21 12 11
         * @param a
         */
        private static void insertSort(int[] a) {
            int out = 0;
            int in = 0;
           
            for (out = 0; out < a.length; out++) {
                int temp = a[out];
                in = out;
                while (in > 0 && a[in - 1] < temp) {
                    a[in] = a[in - 1];
                    in--;
                }
                a[in] = temp;
            }
        }
    }

    一道面试题,对一个数组进行排序,第一个最大,第二个最小,第三个次大,一次类推

    分类: javaSE 126人阅读 评论(0) 收藏 举报

    package test;

    import java.util.Arrays;

    public class TestSort {
     static int[] a = { 12, 24, 32, 28, 25, 60, 48, 9, 15 };

     public static void main(String[] args) {
      for (int i = 0; i < a.length; i++) {
       System.out.print(a[i] + ","); //打印最开始的数组
      }
      System.out.println();                //换行
      Arrays.sort(a); // 对指定 int 型数组的指定范围按数字升序进行排序
      for (int i = 0; i < a.length; i++) {
       System.out.print(a[i] + ",");   // 打印升序排列的数组
      }
      System.out.println();
      for (int i = a.length - 1; i >= 0; i--) {
       System.out.print(a[i] + ",");   // 打印降序排列的数组
      }
      System.out.println();
      tsort(a);                           //按照题目的要求进行排序
      for (int i = 0; i < a.length; i++) {    
       System.out.print(a[i] + ",");     //排序后打印出来
      }

     }

     public static void tsort(int[] a) { // 对排序好的数组进行两边弹出
      boolean flag = true;
      for (int i = 0; i < a.length - 1; i++) {
       if (flag) {
        for (int j = a.length - 1; j > i; j--) {   // flag刚开始为true,执行一次降序
         if (a[j] > a[j - 1]) {
          int team = a[j];
          a[j] = a[j - 1];
          a[j - 1] = team;
         }
        }
       } else {
        for (int j = a.length - 1; j > i; j--) {          //然后flag变为false,执行一次升序
         if (a[j] <= a[j - 1]) {
          int team = a[j];
          a[j] = a[j - 1];
          a[j - 1] = team;
         }
        }
       }
       flag = !flag;
      }
     }

    }

  • 相关阅读:
    分离的思想结合单链表实现级联组件:CascadeView
    对jquery的ajax进行二次封装以及ajax缓存代理组件:AjaxCache
    分离与继承的思想实现图片上传后的预览功能:ImageUploadView
    jquery技巧之让任何组件都支持类似DOM的事件管理
    jquery的事件命名空间详解
    多步骤多分步的组件StepJump
    基于sticky组件,实现带sticky效果的tab导航和滚动导航
    sticky组件的改进实现
    从前端性能优化的角度提高自己的博客的访问速度
    ionic serve 突然报错 node-sass
  • 原文地址:https://www.cnblogs.com/qiuh/p/2782443.html
Copyright © 2011-2022 走看看