我想使用指針而不是數組下標對從最小到最大的數組進行排序。我不知道問題出在哪裏,但是當我運行這段代碼時,這些值以與輸入相同的順序返回。 find_largest和swap函數都按照他們的說法完成。 selection_sort函數使用for循環將數字從右到左排序(從最大到最小,從右到左)。我一直盯着這一段時間,它看起來應該很好,但就像我說的,出於某種原因,這些數字以他們輸入的順序返回。 這裏是我的代碼:用c指針排序數組
#include <stdio.h>
#define N 5
void selection_sort(int *a, int n);
int *find_largest(int *a, int n);
void swap(int *p, int *q);
int main(void)
{
int i;
int a[N];
printf("Enter %d numbers to be sorted: ", N);
for (i = 0; i < N; i++)
scanf("%d", (a+i));
selection_sort(a, N);
printf("In sorted order:");
for (i = 0; i < N; i++)
printf(" %d", *(a+i));
printf("\n");
return 0;
}
void selection_sort(int *a, int n)
{
int i = 0;
int *largest;
for(i = 0; i < n; i++){
largest = find_largest(a, n-i);
swap(largest, a+(n-1-i));
}
}
int *find_largest(int *a, int n){
int *p = a;
int *largest = p;
for(p = a; p < a+n-1; p++){
if(*(p+1) > *p){
largest = (p + 1);
}
}
return largest;
}
void swap(int *p, int *q){
int *temp;
temp = p;
p = q;
q = temp;
}
相反,你的'交換()'函數值不一定做它說什麼。首先,交換函數參數的值對函數外部沒有影響。但更重要的是,這不是你想要交換的指針,而是它們指向的值。 –
[固定代碼](http://ideone.com/GcM14V) – BLUEPIXY
在'swap'中,你實際上需要'int temp;'。然後,修復其餘的代碼。 – jxh