Dictionary ADT インターフェイスを実装する Hashtable を使用した電話帳が必要なこの課題に取り組んでいます。私のファイルはエラーなしで完全に機能していますが、欠点が 1 つだけあります。ハッシュテーブルのキー値がソートされません。特定の数字の組み合わせで電話番号を検索すると、それらはソートされた順序で表示されるはずです。
このクイックソート以外にシェルソートも試してみましたが、役に立たないようです。ここに私がしようとしているものがあります:
public class KeyIterator implements Iterator<K> {
private DictionaryNode[] nodes, n;
private int index;
long modCheck;
private DictionaryNode[] quickSort(DictionaryNode array[]){
n=array;
quickSort(0, n.length-1);
return n;
}
private void quickSort(int left, int right){
if(right-left<=0)
return;
DictionaryNode pivot=n[right];
int partition=getPartition(left,right, pivot);
quickSort(left,partition-1);
quickSort(partition+1,right);
}
private int getPartition(int left, int right, DictionaryNode pivot){
int lPtr=left-1;
int rPtr=right;
for(;;){
while(n[++lPtr].compareTo(pivot)<0);
while(rPtr>0 && n[--rPtr].compareTo(pivot)>0);
if(lPtr>=rPtr)
break;
else swap(lPtr, rPtr);
}
swap(lPtr, right);
return lPtr;
}
private void swap(int lPtr1, int rPtr2) {
DictionaryNode temp=n[lPtr1];
n[lPtr1]=n[rPtr2];
n[rPtr2]=temp;
}
public KeyIterator() {
nodes = new DictionaryNode[currentSize];
index = 0;
modCheck=modCount;
int j = 0;
for (int i = 0; i < tableSize; i++){
for (DictionaryNode n : list[i])
nodes[j++] = n;
}
nodes = (DictionaryNode[]) quickSort(nodes);
}
コードに Java API を使用することは想定されていません。