//输入一串数字,可以从小到大快速排序。 实现不了
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;
}
把最后结果的打印的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;
}