黑马程序员技术交流社区

标题: 数组排序 [打印本页]

作者: 明天你好    时间: 2014-2-26 13:26
标题: 数组排序
给定如下数组:
String[] a={"A","B","C","V","G","H","K"};
String[] b={"B","G"};
要求参照数组b中的字母顺序对数组a进行优先排序,对没有在b数组中出现的字母按一般顺序排在数组的最后,最后输出排好顺序的数组a.

作者: 自由自在2014    时间: 2014-2-26 15:42
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;


public class text {

        /**
         * @param args
         */
        public static void main(String[] args) {
                // TODO Auto-generated method stub
                String[] a={"A","B","C","V","G","H","K"};
                String[] b={"B","G"};
         List<Integer> list=new ArrayList<Integer>();
         
         int i=0;
         while(i<a.length){
                 list.add((int)a[i].charAt(0));
                ++i;
         }
      
         Collections.sort(list);
         if(list.contains((int)b[0].charAt(0))){
                 list.add(0, list.remove((list.indexOf((int)b[0].charAt(0)))));
         }
         if(list.contains((int)b[1].charAt(0))){
                 if(list.get(0)!=(int)b[0].charAt(0))
                 { list.add(0, list.remove((list.indexOf((int)b[1].charAt(0)))));
}
                 else{list.add(1, list.remove((list.indexOf((int)b[1].charAt(0)))));
}

         }
         i=0;
         int j=-1;
      
         
         while(i<a.length){
         
                 int c=list.get(++j);
                    char[] ch={(char)c};
                    a[i]=new String(ch);
                 System.out.println(a[i]);
                 ++i;
         }
         
         

   
         
         
      
               
                 }
               
        }

作者: 明天你好    时间: 2014-2-26 15:47
zengming13 发表于 2014-2-26 15:03
貌似我没看懂你的问题

就是先按照b的数组进行排序,如果a里有b的元素,就把他们按照b的顺序排列,然后再排列a内剩下的元素
作者: syw02014    时间: 2014-2-26 20:28
希望能帮到你:
  1. class SORT{
  2. public static void main(String[] args)         
  3.         {           
  4.                 String  temp;  
  5.                 String [] Arr_a = {"A","B","C","V","G","H","K","A","B","C","V","G","H","K"};  
  6.                 String [] Arr_b = {"B","G"};
  7.                 int num=0;
  8.                 int count=0;
  9.                
  10.                 System.out.print("Arr_a(未按Arr_b排序):");
  11.                 for(int i=0;i<Arr_a.length;i++)
  12.                         System.out.print(Arr_a[i]+" ");
  13.                 System.out.println();
  14.                 System.out.print("Arr_b:                                      ");
  15.                 for(int i=0;i<Arr_b.length;i++)
  16.                         System.out.print(Arr_b[i]+" ");
  17.                 System.out.println("\n");

  18.                
  19.                 for(int i=0;i<Arr_b.length;i++)
  20.                 {
  21.                         for(int j=0;j<Arr_a.length;j++)
  22.                         {
  23.                                 if(Arr_a[j].equals(Arr_b[i]))
  24.                                 {
  25.                                         count++;
  26.                                         temp=Arr_a[num];
  27.                                         Arr_a[num++]=Arr_a[j];
  28.                                         Arr_a[j]=temp;
  29.                                 }
  30.                         }
  31.                 }

  32.                         for(int i=count;i<Arr_a.length;i++)
  33.                                 for(int j=i+1;j<Arr_a.length;j++)
  34.                                         if(Arr_a[i].compareToIgnoreCase(Arr_a[j])>0)
  35.                                         {
  36.                                                 temp=Arr_a[i];
  37.                                                 Arr_a[i]=Arr_a[j];
  38.                                                 Arr_a[j]=temp;
  39.                                         }
  40.                         System.out.print("Arr_a按Arr_b排序:");
  41.                         for(int i=0;i<Arr_a.length;i++)
  42.                                 System.out.print(Arr_a[i]+" ");
  43.                         System.out.println();
  44.         }
  45. }
复制代码




作者: syw02014    时间: 2014-2-26 21:01
这样也行:
  1. class SORT{
  2. public static void main(String[] args)         
  3.         {           
  4.                 String  temp;  
  5.                 String [] Arr_a = {"A","B","C","V","G","H","K","A","B","C","V","G","H","K"};  
  6.                 String [] Arr_b = {"B","G"};
  7.                 int num=0;
  8.                 int count=0;
  9.                
  10.                 System.out.print("Arr_a(未按Arr_b排序):");
  11.                 for(int i=0;i<Arr_a.length;i++)
  12.                         System.out.print(Arr_a[i]+" ");
  13.                 System.out.println();
  14.                 System.out.print("Arr_b:                                      ");
  15.                 for(int i=0;i<Arr_b.length;i++)
  16.                         System.out.print(Arr_b[i]+" ");
  17.                 System.out.println("\n");

  18.                
  19.                 for(int i=0;i<Arr_b.length;i++)
  20.                 {
  21.                         for(int j=0;j<Arr_a.length;j++)
  22.                         {
  23.                                 if(Arr_a[j].equals(Arr_b[i]))
  24.                                 {
  25.                                         count++;
  26.                                         temp=Arr_a[num];
  27.                                         Arr_a[num++]=Arr_a[j];
  28.                                         Arr_a[j]=temp;
  29.                                 }
  30.                         }
  31.                 }
  32.                 for(int i=count;i<Arr_a.length;i++)
  33.                 {
  34.                         for(int j=i+1;j<Arr_a.length;j++)
  35.                                 if(Arr_a[i].compareTo(Arr_a[j])>0)
  36.                                 {
  37.                                         String maxStr=Arr_a[i];
  38.                                         Arr_a[i]=Arr_a[j];
  39.                                         Arr_a[j]=maxStr;
  40.                                 }
  41.                 }
  42.                         System.out.print("Arr_a按Arr_b排序:");
  43.                         for(int i=0;i<Arr_a.length;i++)
  44.                                 System.out.print(Arr_a[i]+" ");
  45.                         System.out.println();
  46.         }
  47. }
复制代码




作者: →★稻草人☆    时间: 2014-2-26 22:25
String[] a={"A","B","C","V","G","H","K"};
                String[] b={"B","G"};

                TreeSet<String> set=new TreeSet<String>();//因为TreeSet中有默认的排序方法,所以我选择用它。
                for(String s:a)
                {
                        set.add(s);
                }
                System.out.println(set);
         ArrayList<String> arr=new ArrayList<String>();//是想把它存到集合中以便于对其中的数据进行换位。
                Iterator<String> it=set.iterator();
       
                while(it.hasNext())
                {
                    arr.add(it.next());
                }
               
                arr.remove(arr.indexOf("B"));//先将两个字符进行删除
                arr.remove(arr.indexOf("G"));

                arr.add(0,"B");//再将两个字符插入到指定的位置。
                arr.add(1,"G");
               
                Object[] us=arr.toArray();
                for(int x=0;x<us.length;x++)
                {
                        System.out.println(us[x]);
                }
        }
作者: 薛旻    时间: 2014-2-26 23:47
  1. /*
  2. 思路:
  3. 1 将a数组自然排序
  4. 2 循环查找B中的元素是否在A中,如果存在,从找的位置开始将前面的不是B中元素往后移动一位
  5. 3 移动后,将B中的一个元素放入A中的前面,位置通过signal标记
  6. */
  7. import java.util.*;
  8. class StringSort {
  9.         public static void main(String[] args) {
  10.                 String[] a = {"A","B","C","V","G","H","K"};
  11.                 String[] b = {"G","B"};

  12.                 String[] c = mySort(a, b);

  13.                 for (int i = 0; i < c.length; i++) {
  14.                         System.out.println(c[i]);
  15.                 }
  16.         }

  17.         public static String[] mySort (String[] a, String[] b) {
  18.                 //先将数组A排序
  19.                 Arrays.sort(a);

  20.                 //记录B中元素该放入的位置
  21.                 int signal = 0;

  22.                 for (int i = 0; i < a.length; i++) {
  23.                         for (int j = 0; j < b.length; j++) {
  24.                                 if(a[i].equals(b[j])) {
  25.                                         //移动位置
  26.                                         move(a, signal, i);
  27.                                         //B元素存入A
  28.                                         a[signal] = b[j];
  29.                                         //标记+1
  30.                                         signal++;
  31.                                 }
  32.                         }
  33.                 }
  34.                 return a;
  35.         }

  36.         //移动数组数据
  37.         public static void move(String[] arr, int start, int end) {
  38.                 for (int i = end; i > start; i--) {
  39.                         arr[i] = arr[i-1];
  40.                 }
  41.         }
  42. }
复制代码





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2