我試圖通過將每個節點的數據複製到一個數組中來排序列表。然後,在對數組進行排序的代碼之後,我試圖 將數組元素中的值複製到每個節點的列表 列表中。這是甚至可能的,我試圖研究的問題不能 找到一個直線是或否。我不想從cstdlib中使用qsort, 這個崩潰,我想知道是否有辦法使這項工作。 Insight深表讚賞。使用數組對C++中的鏈表進行排序以對其數據進行排序
template <typename NODETYPE>
void List<NODETYPE>::sort(){
ListNode<NODETYPE>* currentPtr = firstPtr;
int N = sizeOfList();
NODETYPE a[N];
int l = 0;
int r = 0;
int i,j,min,imin,tmp;
while(currentPtr != NULL){
a[l] = currentPtr->data;
currentPtr = currentPtr ->nextPtr;
l++;
}
for (i=0;i<N-1;i++)
{
imin=i;
min=a[i];
for (j=i+1;j<N;j++)
if (a[j]<min)
{
min=a[j];
imin=j;
}
tmp=a[imin];
a[imin]=a[i];
a[i]=tmp;
}
for (int y = 0; y < N-1; y++){
currentPtr->data = a[y];
currentPtr = currentPtr->nextPtr;
}
lastPtr->data = a[N];
}
*這是甚至可能的* - 確定這是可能的 - 這是窮人的排序鏈表的方式,但它的工作原理。然而這個:'int N = sizeOfList(); NODETYPE a [N];'是無效的C++,因爲不能使用變量聲明數組作爲項目的數量。 – PaulMcKenzie
'NODETYPE a [N]'不是標準的C++,它是一些編譯器的擴展。請注意,如果清單很大,這將導致您的堆棧被吹走。考慮使用'std :: vector'來代替。你可能也想看看'std :: swap'。 – kfsone
另外,您的'List'類是否有一個公共接口,允許外部用戶更改List的數據?如果不是,則需要編寫一個,因爲如果沒有辦法更改數據,則無用。外部世界是否有辦法從頭到尾遍歷列表?我再次問這個,因爲沒有它就沒用了。有了這兩個函數,只需利用已經寫好的內容,就可以輕鬆地對列表進行「排序」。 – PaulMcKenzie