배열 첨자 대신 포인터를 사용하여 배열을 최소에서 최대로 정렬하려고합니다. 나는 문제가 어디에 있는지 모르지만이 코드를 실행할 때 값은 입력 된 것과 동일한 순서로 반환됩니다. 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