创建数组,手动输入数组发现函数调用失败,只传进去最后一个数字

#include<stdio.h>

//输入一串数字,可以从小到大快速排序。 实现不了
void M_quick(int M_array[], int left, int right)
{
int i = left;
int j = right;
int mid;
mid = M_array[(left + right) / 2];
int temp;

while (i <= j)
{
    //从左到右找到大于等于中间值的元素
    while (M_array[i] < mid)
    {
        i++;
    }
    //从右到左找到小于等于中间值的元素
    while (M_array[j] > mid)
    {
        j--;
    }
    //如果i<j,就互换元素
    if (i <= j)
    {
        temp = M_array[i];
        M_array[i] = M_array[j];
        M_array[j] = temp;
        i++;
        j--;
    }

}
if (left < j)
{
    M_quick(M_array, 0, j);
}
if (i < right)
{
    M_quick(M_array, i, right);
}

}

int main()
{
int n;
int *M_array;
int M_i=0;

printf("请输入数字的个数:");
scanf("%d", &n);
M_array =(int *) malloc(n * sizeof(int));
printf("请输入数字,即可得到从小到大排序的结果。\n");
for (M_i = 0; M_i < n; M_i++)
{

    printf("请输入第%d个数字:\n", M_i + 1);
    scanf("%d", &M_array[M_i]);
}

M_quick(M_array, 0,n);

for (M_i = 0; M_i < n ; M_i++)
{
    
    printf("%d ", M_array);
}putchar('\n');
printf("数字的个数为:%d", n);
return 0;

}

img

把最后结果的打印的M_array改为*(M_array+M_i),以及调用快速排序的参数的n改为n-1就好了。

#include <stdio.h> 
#include <stdlib.h>
//https://ask.csdn.net/questions/7677765?spm=1005.2025.3001.5141 
//输入一串数字,可以从小到大快速排序。 实现不了
void M_quick(int M_array[], int left, int right)
{
    int i = left;
    int j = right;
    int mid;
    mid = M_array[(left + right) / 2];
    int temp;
    
    while (i <= j)
    {
        //从左到右找到大于等于中间值的元素
        while (M_array[i] < mid)
        {
            i++;
        }
        //从右到左找到小于等于中间值的元素
        while (M_array[j] > mid)
        {
            j--;
        }
        //如果i<j,就互换元素
        if (i <= j)
        {
            temp = M_array[i];
            M_array[i] = M_array[j];
            M_array[j] = temp;
            i++;
            j--;
        }
     
    }
    if (left < j)
    {
        M_quick(M_array, 0, j);
    }
    if (i < right)
    {
        M_quick(M_array, i, right);
    }
}

int main()
{
    int n;
    int *M_array;
    int M_i=0;
    
    printf("请输入数字的个数:");
    
    scanf("%d", &n);
    M_array =(int *) malloc(n * sizeof(int));
    printf("请输入数字,即可得到从小到大排序的结果。\n");
    for (M_i = 0; M_i < n; M_i++)
    {
     
        printf("请输入第%d个数字:\n", M_i + 1);
        scanf("%d", &M_array[M_i]);
    }
     
    M_quick(M_array, 0,n-1);
     
    for (M_i = 0; M_i < n ; M_i++)
    {
        
        printf("%d ", *(M_array+M_i));
    }putchar('\n');
    printf("数字的个数为:%d", n);
    return 0;
}