黑马程序员技术交流社区
标题:
数组排序
[打印本页]
作者:
明天你好
时间:
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
希望能帮到你:
class SORT{
public static void main(String[] args)
{
String temp;
String [] Arr_a = {"A","B","C","V","G","H","K","A","B","C","V","G","H","K"};
String [] Arr_b = {"B","G"};
int num=0;
int count=0;
System.out.print("Arr_a(未按Arr_b排序):");
for(int i=0;i<Arr_a.length;i++)
System.out.print(Arr_a[i]+" ");
System.out.println();
System.out.print("Arr_b: ");
for(int i=0;i<Arr_b.length;i++)
System.out.print(Arr_b[i]+" ");
System.out.println("\n");
for(int i=0;i<Arr_b.length;i++)
{
for(int j=0;j<Arr_a.length;j++)
{
if(Arr_a[j].equals(Arr_b[i]))
{
count++;
temp=Arr_a[num];
Arr_a[num++]=Arr_a[j];
Arr_a[j]=temp;
}
}
}
for(int i=count;i<Arr_a.length;i++)
for(int j=i+1;j<Arr_a.length;j++)
if(Arr_a[i].compareToIgnoreCase(Arr_a[j])>0)
{
temp=Arr_a[i];
Arr_a[i]=Arr_a[j];
Arr_a[j]=temp;
}
System.out.print("Arr_a按Arr_b排序:");
for(int i=0;i<Arr_a.length;i++)
System.out.print(Arr_a[i]+" ");
System.out.println();
}
}
复制代码
作者:
syw02014
时间:
2014-2-26 21:01
这样也行:
class SORT{
public static void main(String[] args)
{
String temp;
String [] Arr_a = {"A","B","C","V","G","H","K","A","B","C","V","G","H","K"};
String [] Arr_b = {"B","G"};
int num=0;
int count=0;
System.out.print("Arr_a(未按Arr_b排序):");
for(int i=0;i<Arr_a.length;i++)
System.out.print(Arr_a[i]+" ");
System.out.println();
System.out.print("Arr_b: ");
for(int i=0;i<Arr_b.length;i++)
System.out.print(Arr_b[i]+" ");
System.out.println("\n");
for(int i=0;i<Arr_b.length;i++)
{
for(int j=0;j<Arr_a.length;j++)
{
if(Arr_a[j].equals(Arr_b[i]))
{
count++;
temp=Arr_a[num];
Arr_a[num++]=Arr_a[j];
Arr_a[j]=temp;
}
}
}
for(int i=count;i<Arr_a.length;i++)
{
for(int j=i+1;j<Arr_a.length;j++)
if(Arr_a[i].compareTo(Arr_a[j])>0)
{
String maxStr=Arr_a[i];
Arr_a[i]=Arr_a[j];
Arr_a[j]=maxStr;
}
}
System.out.print("Arr_a按Arr_b排序:");
for(int i=0;i<Arr_a.length;i++)
System.out.print(Arr_a[i]+" ");
System.out.println();
}
}
复制代码
作者:
→★稻草人☆
时间:
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 将a数组自然排序
2 循环查找B中的元素是否在A中,如果存在,从找的位置开始将前面的不是B中元素往后移动一位
3 移动后,将B中的一个元素放入A中的前面,位置通过signal标记
*/
import java.util.*;
class StringSort {
public static void main(String[] args) {
String[] a = {"A","B","C","V","G","H","K"};
String[] b = {"G","B"};
String[] c = mySort(a, b);
for (int i = 0; i < c.length; i++) {
System.out.println(c[i]);
}
}
public static String[] mySort (String[] a, String[] b) {
//先将数组A排序
Arrays.sort(a);
//记录B中元素该放入的位置
int signal = 0;
for (int i = 0; i < a.length; i++) {
for (int j = 0; j < b.length; j++) {
if(a[i].equals(b[j])) {
//移动位置
move(a, signal, i);
//B元素存入A
a[signal] = b[j];
//标记+1
signal++;
}
}
}
return a;
}
//移动数组数据
public static void move(String[] arr, int start, int end) {
for (int i = end; i > start; i--) {
arr[i] = arr[i-1];
}
}
}
复制代码
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2