1
该程序应该采用一个数组,并将其从最低值排序到最高值。我的程序不会排序任何值。我相信这个错误是在selectionSort中。值i和j存在于函数中,我将它们打印在函数内部,但它们不会传递到交换函数中。我试图让我和j指针,但它没有工作。我不知道下一步该怎么做。任何帮助,将不胜感激。C程序,通过指针进行函数排序
#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;
}
如果您还没有试过使用调试器,现在是了解如何使用调试器的最佳时机。有了它,您可以逐行浏览代码,进入或跳过函数调用,并监视变量及其值。使用调试信息构建程序的一个版本,并在调试器中运行以帮助您找到问题。知道如何使用调试器是非常重要的,如果你想认真对待编程,因为它是更大的“编程”图片的重要组成部分。 –
哦,对于任何指针或数组'a'和整数'i',表达式*(a + i)'相当于'a [i]'。除了少写点外,它在大多数情况下还能更好地使代码更易于阅读,理解和维护。 –