我正在編輯一個快速排序代碼,以便低位,高位和中間值指向數組元素而不是整數。賦值使指針沒有轉換
這是我的代碼:
#include <stdio.h>
#define N 10
void quicksort(int a[], int *low, int *high);
int split(int a[], int *low, int *high);
int main(void)
{
int a[N], i;
printf("Enter %d numbers to be sorted: ", N);
for (i=0; i<N; i++)
scanf("%d", &a[i]);
quicksort(a, &a[0], &a[N-1]);
printf("In sorted order: ");
for (i=0; i<N; i++)
printf("%d ", a[i]);
printf("\n");
return 0;
}
void quicksort(int a[], int *low, int *high)
{
int *middle;
if (low >= high) return;
middle = split(a, low, high);
quicksort(a, low, middle - 1);
quicksort(a, middle + 1, high);
}
int split(int a[], int *low, int *high)
{
int part_element = *low;
for (;;) {
while (low < high && part_element <= *high)
high--;
if (low >= high) break;
*low++ = *high;
while (low < high && *low <= part_element)
low++;
if (low >= high) break;
*high-- = *low;
}
*high = part_element;
return *high;
}
我收到錯誤消息:
qs.c:32:12: warning: assignment makes pointer from integer without a cast [enabled by default]
middle = split(a, low, high);
^
有人可以幫助我?仍然是編程初學者。所有類型的幫助表示讚賞。
'middle'是指針; 'split()'返回一個整數。你期望發生什麼? – user3553031
'split'返回一個int。 'middle'是一個指針。也許只是返回'high'而不是'* high'? – ooga
'split()'返回一個'int'。 'middle'是一個'int *',所以警告說「你正在給一個指針分配一個int,這可能不是你想要做的事情」。 – John3136