[英]C++ Using pointers for selection sort function
我有一個任務,通過傳遞指針來編碼一些排序功能。 不幸的是,指針只是我的大腦似乎不理解的那些概念之一。
這是電話:
int size = 10000;
int* data = new int[size];
//omitted code that populates array for the sake of space
selectionSort(data, data+size);
這是我對函數的不正確嘗試:
void selectionSort(int* first, int* last) {
for (int* i = first; i < last-1; i++) {
int* min = i;
for (int* j = i+1; j < last; j++) {
if (j < min) {
min = j;
}
int* temp = i;
i = min;
min = temp;
}
}
}
基本上,我很難弄清楚將一個指針與另一個指針進行比較或調整指針時會發生什么。 它是否也在調整/比較其指向的值,還是在比較實際的指針本身?
任何幫助表示贊賞。 干杯。
指針有時是一個很難理解的概念。 將它們視為對值的引用,而不是值本身(這是郵箱的地址,而不是郵箱的內容),可能會有所幫助。
在您的代碼中'int * min = i;' 將min設置為與“ i”相同的地址(引用)。 因此,稍后在“ if”語句“ if(j <min)”中,您將比較引用而不是值。 您需要“取消引用”指針以獲取值,例如:'if(* j <* min)'。
如果是指針,
int* i; //i holds actual physical memory address & i* holds value at that address.
現在,在您的selectionSort
函數中, if
條件比較實際內存地址而不是值。 請參閱此處的示例。
絕對不要把自己擺在需要創建自己的排序算法的位置。 相反,您應該始終嘗試利用現有的收集類,例如set,它將為您排序。 話雖如此,如果您的目標是更好地理解指針,那么正如greatwolf所評論的那樣,您不應該對指針進行排序,而應該對指針進行排序! 在您的情況下,整數。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.