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]'。除了少寫點外,它在大多數情況下還能更好地使代碼更易於閱讀,理解和維護。 –