该程序应该采用数组,并从最低值到最高值进行排序。我的程序不会对任何值进行排序。我相信错误在selectionSort中。值i和j出现在函数中,我将它们打印在函数内部,但它们不会传递给交换函数。我尝试制作i和j指针,但它没有用。我不知道接下来该做什么。任何帮助,将不胜感激。
#include <stdio.h>
#define N 5
void selectionSort(int *a, int n);
int *findLargest(int *a, int n);
void swap(int *p, int *q);
int main(void)
{
int i;
int a[N];
printf("Enter %d numbers: ", N);
for (i = 0; i < N; i++) {
scanf("%d", &a[i]);
}
selectionSort(a, N);
printf("In sorted order:");
for (i = 0; i < N; i++) {
printf(" %d", a[i]);
}
printf("\n");
return 0;
}
void selectionSort(int *a, int n)
{
int *p = a;
int i;
int j;
if (n == 1) {
return;
}
i = *(p+n-1);
j = *findLargest(a, n);
swap(&i, &j);
selectionSort(a, n - 1);
}
int *findLargest(int *a, int n)
{
int *p;
int *p_max = a;
for(p = a + 1; p < a + n - 1; p++) {
if ( *p > *p_max)
p_max = p;
}
return p_max;
}
void swap(int *p, int *q)
{
int temp = *(p-1);
*(p-1) = *q;
*q = temp;
}
答案 0 :(得分:1)
问题在于您调用swap
:您交换了两个局部变量的内容
int i;
int j;
... // Some other code, then
swap(&i, &j);
这对原始数组没有影响。您应该直接传递p+n-1
和findLargest(a, n)
,或将结果存储在指针中,而不是int
中:
swap(p+n-1, findLargest(a, n));
此外,您的swap
已损坏:它假定p
指向一个元素超过目标位置,而不是交换两个指针的内容。这是在通用函数中做出的错误假设,例如swap
,它也会导致程序中出现未定义的行为。
void swap(int *p, int *q) {
int temp = *p;
*p = *q;
*q = temp;
}