密码错误请重试 2021-12-12 10:13 采纳率: 100%
浏览 98
已结题

有关快排的疑惑,一直报错运行时错误

给定包含n个元素的整型数组a[n],利用快速排序算法对其进行递增排序,请输出排序过程,即每次Partition之后的数组。每次选择所处理的子数组的第一个元素作为基准元素。

输入格式:
输入为两行,第一行为一个整数n(1<n≤1000),表示数组长度。第二行为n个空格间隔的整数,表示待排序的数组。

输出格式:
输出为若干行,每行依次输出Partition后的数组,每个元素后一个空格。

输入样例:
5
4 5 3 2 1
输出样例:
2 1 3 4 5
1 2 3 4 5
1 2 3 4 5


#include<stdio.h>
int a[1000], r;
void f(int* a, int i, int j,int v) {
    int key, m, n, k,z;
    int* l = a;
    if (i >= j)return;
    m = i;
    n = j;
    key = l[i];
    while (m < n) {
        while (l[n] >= key && m < n)n--;
        while (l[m] <= key && m < n)m++;
        if (m < n) {
            z = l[m];
            l[m] = l[n];
            l[n] = z;
        }
    }
    l[i] = l[n];
    l[n] = key;
    for (k = 0; k < v; k++)printf("%d ", l[k]);
    printf("\n");
    if(m-1>i)f(a, i, m - 1,v);
    if(j>m+1)f(a, m + 1, j,v);
    return;
}
int main(void) {
    int i, j,k;
    int a[50] = { 0 };
    scanf_s("%d", &r);
    for (i = 0; i < r; i++) {
        scanf_s("%d", &j);
        a[i] = j;
    }
    f(a, 0, r - 1,r);
    for (k = 0; k < r; k++)printf("%d ", a[k]);
    printf("\n");
    return 0;
}

在pta的运行中一直显示运行时错误,或者段错误,有一个测试点还答案错误了,十分疑惑,由于给出的测试点有限,想不出来,希望能有人解惑

  • 写回答

1条回答 默认 最新

  • CSDN专家-link 2021-12-12 10:44
    关注

    开头定义了一个全局的a[1000],main里又定义个a[50],题目要求数组范围是1-1000,你为啥又定义一个a[50]呢?一旦PTA测试用例超过50个数字,程序肯定不行啊。去掉main中的a[50]定义

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 12月20日
  • 已采纳回答 12月12日
  • 创建了问题 12月12日

悬赏问题

  • ¥20 用HslCommunication 连接欧姆龙 plc有时会连接失败。报异常为“未知错误”
  • ¥15 网络设备配置与管理这个该怎么弄
  • ¥20 机器学习能否像多层线性模型一样处理嵌套数据
  • ¥20 西门子S7-Graph,S7-300,梯形图
  • ¥50 用易语言http 访问不了网页
  • ¥50 safari浏览器fetch提交数据后数据丢失问题
  • ¥15 matlab不知道怎么改,求解答!!
  • ¥15 永磁直线电机的电流环pi调不出来
  • ¥15 用stata实现聚类的代码
  • ¥15 请问paddlehub能支持移动端开发吗?在Android studio上该如何部署?