南大高级算法之备考题——按照另一个数组排序

题意:给定一个待排序数组和一个参考数组,对于待排序数组,优先按照参考数组里的顺序来排,其他的数再按照升序排

题解:自定义一个数据结构,保存数值和优先级,在初始化的时候把数放到我们自定义的数据结构数组的数值中,再遍历一遍我们自定义数据结构的数组,记参考数组长度为parray_length,出现哪个位置(pos)的数,我们就把自定义的数据结构中优先级置为parray_length-pos,其余未出现的优先级置为0,改写Arrays.sort(,new Comparator());使其优先按照优先级排序即可。

代码:

import java.util.*;

class Node{
	public Node(int value){	
		this.value = value;
	}
	int value;
	int priority;
	public void getPriority(int priority){
		this.priority = priority;
	}
}

public class Main {
    public static void main(String[] args) {
    	Scanner scan = new Scanner(System.in);
		int e_num = scan.nextInt();//测试数
		while(e_num>0){
			int varray_length = scan.nextInt();//the length of array
			int parray_length = scan.nextInt();
			HashMap<Integer,Integer> map = new HashMap<>();
			Node[] narray = new Node[varray_length];
			int[] parray = new int[parray_length];
			for(int i=0;i<varray_length;i++){
				narray[i] = new Node(scan.nextInt());
			}
			for(int i=0;i<parray_length;i++){
				parray[i] = scan.nextInt();
			}
			for(int i=0;i<varray_length;i++){
				narray[i].getPriority(0);
				for(int j=0;j<parray_length;j++){
					if(narray[i].value == parray[j]){
						narray[i].getPriority(parray_length-j);
					}
				}
			//	System.out.println(nodearray[i].count);
			}
			Arrays.sort(narray,new Comparator<Node>(){
				@Override
				public int compare(Node o1,Node o2){
					if(o1.priority>o2.priority){
						return -1;	
					}
					if(o1.priority<o2.priority){
						return 1;	
					}
					if(o1.value<o2.value){
						return -1;	
					}
					if(o1.value>o2.value){
						return 1;	
					}
					return 0;	
				}
			});
			for(int i=0;i<varray_length;i ++){
				if(i!=varray_length-1){
					System.out.print(narray[i].value+" ");
				}else{
					System.out.print(narray[i].value);
				}
			}
			System.out.println();
			e_num --;
		}
    }
}
发布了36 篇原创文章 · 获赞 2 · 访问量 1974

猜你喜欢

转载自blog.csdn.net/fumonster/article/details/103357129
今日推荐