配列の添字の代わりにポインタを使って配列を最小から最大までソートしようとしています。私は問題がどこにあるのかわかりませんが、このコードを実行すると、値は入力されたのと同じ順序で返されます。 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