日期:2014-05-20  浏览次数:20716 次

求:一道关于vector 的算法
问题是:
假设我添加一个数,相应的给Vector也添加一个标志数。
例如:我先添加1,3两个数,vector元素的顺序也是1,3
然后我在1,3中间添加2,vector元素的顺序是1,3,2
我怎么去调整这个顺序啊,使vector的顺序为1,2,3

------解决方案--------------------
我写的一个用“快速排序算法”排序的类
/**
* 可排序类型
* @author jiangxu
* @version 1.0, Jan 25, 2007
* @since 1.5
*/
public interface SortableType {
/**
* 与st比较
*
* @param st
* @return 如果相等返回0; 如果大于st,返回大于0的值;如果小于st返回小于0的值
*/
int compareTo(SortableType st);
}

/**
* 排序
* @author jiangxu
* @version 1.0, Jan 25, 2007
* @since 1.5
*/
public class Sort {
/**
* 快速排序链表中内容
*
* @param <T>
* @param list
*/
@SuppressWarnings(value={ "unchecked "})
public static <T extends SortableType> void quickSort(Vector <T> list){
if(list.size() <= 1){
return;
}

Object[] contentArray = list.toArray();

quickSort(contentArray, 0, contentArray.length-1);

list.clear();
for(int i=0; i <contentArray.length; i++){
list.add((T)contentArray[i]);
}
}

/**
*
* @param contentArray
* @param low
* @param high
*/
private static void quickSort(Object[] contentArray, int iLow, int iHigh){
int low = iLow;
int high = iHigh;
SortableType mid = (SortableType)contentArray[(low + high)/2];

do{
while(((SortableType)contentArray[low]).compareTo(mid) < 0){
low ++;
}

while(((SortableType)contentArray[high]).compareTo(mid) > 0){
high--;
}

if(low <= high){
Object tmp = contentArray[low];
contentArray[low] = contentArray[high];
contentArray[high] = tmp;
low++;
high--;
}

if(high > iLow){
quickSort(contentArray, iLow, high);
}

if(low < iHigh){
quickSort(contentArray, low, iHigh);
}

}while(low <= high);
}


public static void main(String[] args){
///////////////////////////////////
//测试对向量中元素的快速排序
class Data implements SortableType{
private int value;

public Data(int value){
this.value = value;
}

public String toString(){
return "( "+value+ ") ";
}

public int compareTo(SortableType st){
return this.value - ((Data)st).value;
}
}

Vector <Data> list = new Vector <Data> ();
list.add(new Data(28));
list.add(new Data(3));
list.add(new Data(5));
list.add(new Data(21));
list.add(new Data(17));
list.add(new Data(6));
list.add(new Data(18));
list.add(new Data(4));
list.add(new Data(6));
list.add(new Data(9));
list.add(new Data(10));