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

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;
  }
 }

}

 

posted @ 2012-11-22 12:42  qiuhua  阅读(561)  评论(0编辑  收藏  举报