前言
平时大家大多都是对数组进行各种方式的排序,很少对数组的下标进行排序,什么是对数组的下标进行排序?即按数组值的大小对相应的数组下标进行排序。具体方法见以下正文。
正文
解题的重点是如何保存值和下标的对应关系,这里自然就想到map这类key、value键值对集合,如果用c实现也可以用结构体等其它方法。利用map即可把原数组的值和下标的对应关系保存下来了,然后对数组值进行排序,排完序后,原数组的下标根据键值对一一对应关系也就排完序了,具体代码实现如下
public void listSort(List list){
Object key_temp;
int value_temp;
List list_sort = new ArrayList<Integer>();
Map list_to_map = new HashMap<Integer,Integer>();
for (int i = 0;i < list.size();i ++){
list_to_map.put(i,list.get(i));
}
while(!list_to_map.isEmpty()){
Set set = list_to_map.keySet();
Iterator iterator = set.iterator();
key_temp = list_to_map.keySet().toArray()[0];
value_temp = (int)list_to_map.values().toArray()[0];
while(iterator.hasNext()){
Object key = iterator.next();
int value = (int)list_to_map.get(key);
if (value < value_temp){
value_temp = value;
key_temp = key;
}
}
list_sort.add((int)key_temp);
list_to_map.remove(key_temp);
}
for (int i = 0;i < list_sort.size();i ++){
System.out.println(list_sort.get(i));
}
}