各ノードのデータを配列 にコピーすることでリストをソートしようとしました。次に、配列をソートしたコードの後に、配列の要素の値を各ノードの リストにコピーするために を試しました。それも可能です、私は質問を研究しようとしたことができませんでした まっすぐにはいまたはいいえを見つけることができませんでした。私は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のデータを変更できるようにするためのパブリックインタフェースがありますか?そうでない場合は、データを変更する方法がない場合は役に立たないので、1つを書き込む必要があります。外の世界が最初から最後までリストを反復する方法はありますか?再び、私はそれがなければ役に立たないので、これを尋ねます。これらの2つの機能を使用すると、既に書いたものを利用するだけで簡単にリストを「並べ替える」ことができます。 – PaulMcKenzie