2016-10-18 5 views
0

ポインタを使ってクイックソートアルゴリズムを作成しようとしていますが、運があまりありません。私のコードはコンパイルされますが、うまくいきません。問題を解決する方法がわかりません。 ご協力いただければ幸いです。ポインタを使ったクイックソートアルゴリズム?

int* partition(int* start, int* stop) { 
    int* pivot = stop - 1; // you can randomly pick one as the pivot 
    int* i = start; 
    int* j = stop - 1; 
    for (;;) { 
     while (i < pivot && i < stop) ++i; // skip "low" on left side 
     while (j >= pivot && j > start) --j; // skip "high" on right side 
     if (*i >= *j) break; 
     swap(i, j); // swap out-of-place items 
    } 
    swap(*(stop - 1), *i); // swap pivot to the final place i 
    return i; 
} 


void quickSort(int* start, int* stop) { 
    if (stop - start <= 1) return; 
    int* pivot = partition(start, stop); 
    quickSort(start, pivot); 
    quickSort(pivot + 1, stop); 
} 
+0

どのように機能しないのですか?あなたは何を期待しましたか、代わりに何を得ましたか?解決する問題を説明してください。 –

+0

このプログラムは、アルゴリズムのタイプ、データセットのサイズ、およびデータセットのタイプを出力するためのものです。現在、他のソート関数でも動作しますが、この関数は何も返しません。 –

+0

'int * pivot = stop-1;'どこにstopが定義されていますか? 'stop-1'が使用可能なアドレスであること、つまりソートされたすべての値が連続して格納されていることをどのように確認できますか? – Ayak973

答えて

0

アドレスの代わりにアドレスの内容を比較してはいけませんか? 具体的には、

while(*i < *pivot) 

while(*j >= *pivot) 

また、あなたは内容ではなくポインタを交換する必要があります。

swap(*i, *j); 

あなたが達成したいと思っていることは不明です。私の答えは、並べ替える配列の要素が連続して格納されるという根本的な前提があります。あなたは値はここを指摘比較する必要がありながら

0

条件i < pivotj >= pivotポインタを比較します。

関連する問題