Assignment makes pointer without a cast

前端 未结 2 1130
星月不相逢
星月不相逢 2021-01-26 11:31

I am editing a quick sort code so that the values of low, high, and middle point to an array element instead of integers.

This is my code:

#include 

        
相关标签:
2条回答
  • 2021-01-26 11:52

    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.

    0 讨论(0)
  • 2021-01-26 12:11

    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;
    }
    
    0 讨论(0)
提交回复
热议问题