我正在尝试使用指针而不是数组下标将数组从最小到最大排序。我不确定问题出在哪里,但是当我运行此代码时,将以与输入它们相同的顺序返回值。find_largest和swap函数都完全按照它们说的去做。selection_sort函数使用for循环从右到左(从最大到最小,从右到左)对数字进行排序。我已经凝视了一段时间,它看起来应该可以正常工作,但是就像我说的那样,由于某种原因,数字以与输入时相同的顺序返回。这是我的代码:
#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;
}
您的代码中有两个错误。一,在find_largest函数中逻辑:
int *find_largest(int *a, int n){
int *p = a;
int *largest = p;
for(p = a; p < a+n-1; p++){
if(*(p+1) > *largest){ <---- //here you were checking for *(p)
largest = (p + 1);
}
}
return largest;
}
另一个是在交换函数中带有指针:
void swap(int *p, int *q){
int temp;
temp = *p;
*p = *q;
*q = temp;
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句