编辑代码

#include <stdio.h>
#include <stdlib.h>
void G_qsort(int *a,int first,int mid,int last,int *temp)
{
int n = mid,m = last;
int k = 0;
int i = first,j = mid+1;
while(i <= n && j <= m) // 两边同时进行
{
if(a[i] <= a[j]) // i和j进行比较
{
    temp[k++] = a[i++]; // 如果i <= j,则i的值移动到temp里面
}
else
    {
        temp[k++] = a[j++]; // 如果i > j,则j的值移动到temp里面
    }
}
while(i <= n)
{
    temp[k++] = a[i++];
}

while(j <= m)
{
    temp[k++] = a[j++];
}

for(i = 0; i < k; i++)
    {
        a[first+i] = temp[i];
    }
}



void G_sort(int *a,int first,int last,int *temp)
{
if(first < last) // 当同时到达一个数时结束判断

    {
        int mid = (first+last)/2; // 找到中间值
        G_sort(a,first,mid,temp); // 递归函数左边
        G_sort(a,mid+1,last,temp); // 右边
        G_qsort(a,first,mid,last,temp); // 进行排序
    }
}
int sort(int *a,int n)
{
    int *p = malloc(n); // 分配内存大小
    if(p == NULL)
    {
        return -1;
    }
else
{
    free(p);
    G_sort(a,0,n-1,p); // 调用函数传参,0和n-1为第一个数和最后一个数下标
    p = NULL;
    return 1;
}
}

int main()
{
int a[8]={8,4,5,7,1,3,6,2};
int i;
sort(a,8); // 调用函数传参
for(i = 0; i < 8; i++)
{
printf("%d",a[i]);
}
printf("\n");

return 0;

}