Assignment makes pointer without a cast

£可爱£侵袭症+ 提交于 2019-12-02 11:27:38
Sagar Bahadur Tamang

The problem is in this statement.

middle = split(a, low, high);

because middle is a pointer variable whereas split is a function which returns integer value not a pointer to an integer.

You are assigning integer value to a pointer variable middle . You are not allowed to do that. :)

May be this will help you.

Change 'split()' to return an 'int *' instead of 'int'.

Change the last line of the 'split()' function from:

return *high;

to

return high;

Perhaps this would work better:

#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;
}
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!