我正在尝试使用指针而不是数组下标对数组进行从小到大的排序。我不确定问题出在哪里,但是当我运行这段代码时,返回值的顺序与输入时的顺序相同。 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;
}
另一个是swap函数中的指针:
void swap(int *p, int *q){
int temp;
temp = *p;
*p = *q;
*q = temp;
}
关于c - 用指针对c中的数组进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39712866/