關於排序函數的問題


衆所周知,自定義函數之間的參數引用傳值傳地址,
即直接在函數中改變變量的值是沒有任何意義的,當你跳出該自定義函數後,你所傳入的變量值仍然沒有作任何改變。
因此須要引入一種可以真正改變變量數值的變量,使要改變的變量在自定義函數改變後不會回到原來未進入自定義函數時的值。
因此這裏要用到指針。
到底什麼是指針這裏就不說了。網上有好多不過仍是建議看看書,看幾節網課估計就理解個差很少了。
好了,進入今天的正題。今天主要講怎樣編寫一個用來排序的自定義函數。
使其即便跳出自定義函數,其值依然是自定義函數排列好的順序。
#include<stdio.h>//這裏以長度爲6的數組爲例,改變長度只需稍加改變,若是切實須要評論區回覆,小陳及時更新
void swap(int *a[], int b)/*定義函數,由於只是排序,故爲void型函數。
該函數要引入一指針數組。a爲數組名,b位長度,關於這裏的解析見主頁。*/
{
int q, s, d, i, w, max;
//排序算法,這裏用的是選擇法,有興趣的能夠用冒泡法再寫一遍。關於這兩種方法具體見主頁。
for (q = 0; q < b - 1; q++)
{
d = q;
max = *a[q];
for (i = q + 1; i < b; i++)
{
if (*a[i] > max)
{
max = *a[i];
d = i;
}
}
*a[d] = *a[q];
*a[q] = max;算法

}
}
int main()
{
int a, s, d, f;
int q[6];// 定義數組
int *w[6];//定義指針數組
for (a = 0; a < 6; a++)//輸入數組內容,並初始化指針。
{
scanf("%d", &q[a]);
w[a] = &q[a];
}
swap(w, 6);//引用自定義函數
for (a = 0; a < 6; a++)//輸出排好的數組。看序列是否調整完畢。治理爲降序排列。
{
printf("%d ", q[a]);
}
return 0;數組

}函數

OK,上面代碼的註釋對每一步都進了較爲詳細的解釋。
下面給出依次試運行結果截圖指針


上面即爲試運行截圖。
若是還有什麼問題呢,評論區留言。
若是上述代碼有什麼問題的話,請予以指出,謝謝。 😉排序

相關文章
相關標籤/搜索