所以我期待做你的基本選擇排序。我從書中逐字複製(稍後將列出一個例外)。這是代碼。有花哨瓦特/選擇排序,現在它不會排序
void SelectionSort::sort(int arr[], int size)
{
int isEqual;
int startScan, minIndex, minValue;
for (startScan = 0; startScan < (size - 1); startScan++)
{
minIndex = startScan;
minValue = arr[startScan];
for (int index = startScan + 1; index < size; index++)
{
isEqual = counters(arr[index], arr[index + 1]);
if (isEqual == 1)
{
minValue = arr[index];
minIndex = index;
}
}
arr[minIndex] = arr[startScan];
arr[startScan] = minValue;
}
}
你會發現我有一個分配給一個方法counters
的int isEqual
。我之所以使用這個,是因爲我想保持比較的結果。
代碼爲counters
int AbstractSort::counters(int a, int b)
{
counter++;
if (a < b)
return -1;
if (a > b)
return 1;
if (a == b)
return 0;
}
基本上,它的作用一樣if (array[index] < minValue)
只有這樣我可以跟蹤我的比較。
我在我的QuickSort類中使用這種方法,它對數據進行排序並計數比較沒有問題。但我的SelectionSort不會對數據進行排序!
它看起來像它移動陣列到前面的最後一個數字,然後什麼也不做。然而它似乎做了190次比較,儘管我沒有特別看到它的勞動成果。
我已經用我的橡皮鴨一行一行的討論了這個代碼,但是我們都沒有發現這個錯誤。 我哪裏錯了?
聽起來像調試器的工作。 –
isEqual == 1表示a> b表示arr [index]> arr [index + 1],但在if語句的主體中,您將arr [index]賦值給一個名爲「minValue」的變量。如果它大於arr [index + 1],arr [index]不能是最小值,可以嗎?你的意思是isEqual == - 1? – SCFrench
isEqual == 1和isEqual == -1僅更改數組排序的順序。所以,一個從高到低,另一個從低到高,但不影響我通過排序的能力(據我所知) – Podo