我需要對數組中的奇數或偶數進行排序,同時保持其餘的不變。由於這是內存管理課程的一部分,我強烈希望不要複製任何數據,所以我沒有選擇明顯的解決方案。只對數組中的奇數或偶數排序
我想通過跳過比較的「壞」第一或第二參數來使用簡單的氣泡排序功能。我只會發布該函數,因爲其餘部分都是不相關的。
//these are passed as sort_type_remainder
#define REMAINDER_EVEN 0
#define REMAINDER_ODD 1
void sort_integers(int *integer_list, int num_integers, int sort_type_remainder)
{
int i, j, aux, offset = 1;
for(i = 0; i < num_integers - 1; i++)
{
offset = 1;
for(j = 0; j + offset < num_integers - i; j++)
{
if(abs(integer_list[j] % 2) != sort_type_remainder) //first element to be compared is of wrong type, skip
{
j++;
}
else
{
//first element is of good type, but second element is not, increase offset and reloop first element
if(abs(integer_list[j + offset] % 2) != sort_type_remainder)
{
j--;
offset++;
}
else //both elements are of good type, bubble sort them
{
if(integer_list[j] > integer_list[j + offset])
{
aux = integer_list[j + offset];
integer_list[j + offset] = integer_list[j];
integer_list[j] = aux;
}
offset = 1;
}
}
}
}
}
這種工作,但一些輸入處理不當,我不明白爲什麼。我嘗試減小輸入大小以獲得更簡單的方法來重現此問題,但只要我這樣做,它就能正常工作。
這裏是輸入/輸出,我刪除了偶數,因爲他們留在他們的位置,它使得錯誤更容易注意到。
odd
20
13 5 -3 4 2 -7 23 -33 1 6 -8 7 10 -51 9 -5 12 92 69 55
任何幫助或建議將不勝感激,優選地具有解釋不只是一個解決方案。
編輯::完整的程序是在這裏,不希望混亂的問題http://pastebin.com/vZDcmppV
請選擇一種語言,C或C++。使用C++,它大約是使用算法函數的3或4行解決方案。 – PaulMcKenzie
@PaulMcKenzie我做到了,對不起,沒想到它很重要。我更感興趣的是爲什麼我的方法不起作用,而不是更好的解決方案。 – aron9forever
這是學習如何使用調試器的絕佳機會,如果以前沒有做過。使用調試器,您可以逐行執行代碼,同時監視變量及其值。通過這種方式,您可以看到代碼的真實情況。或者,您可以先嚐試一些[橡皮鴨調試](https://en.wikipedia.org/wiki/Rubber_duck_debugging)。 –