LarsR7 2017-03-26 11:48 采纳率: 100%
浏览 993
已结题

学算法的时候写了个三路快排(C++),然后编译器又请我吃bug了,各位大佬麻烦帮我看看吧

 /*-----------Quick Sort 3 Ways-----------*/
template<typename T>
void QuickSort3ways(T arr[], int n)
{
    srand(NULL);
    Sub_QuickSort3ways(arr, 0, n - 1);
}

template<typename T>
void Sub_QuickSort3ways(T arr[], int L, int R)
{
    swap(arr[L], arr[rand() % (R - L + 1) + L]);
    T v = arr[L];

    int lt = L;
    int gt = R + 1;
    int i = L + 1;
    while (i < gt)
    {
        if (arr[i] < v)
        {
            swap(arr[i], arr[lt + 1]);
            lt++;
            i++;
        }
        else if (arr[i] > v)
        {
            swap(arr[i], arr[gt - 1]);
            gt--;
        }
        else
            i++;
    }

    swap(arr[L], arr[lt]);

    Sub_QuickSort3ways(arr, L, lt - 1);
    Sub_QuickSort3ways(arr, gt, R);
}
 int main()
{
    int n = 100000;
    int *arr1 = GenerateRandomArray(n, 0, n);

    TimeTest("Quick Sort 3 Ways", QuickSort3ways, arr1, n);
    delete[] arr1;

    system("pause");

    return 0;
}

先解释一把:GenerateRandomArray 生成一个随机数组,参数是元素个数,和元素的范围,函数内部用的是new申请的内存。
Time Test 测试算法的运行时间,参数分别是:算法名,使用的函数,数组和元素个数。
编译器:VS2015

然后他就告诉我栈溢出了

图片说明

然后我找到了 call stack模块,里面是这样的:
图片说明

有点蒙,为啥总是说R的值为-1??是不是哪里又写错了……

为什么没有人

  • 写回答

1条回答 默认 最新

  • shen_wei 2017-03-27 07:41
    关注
    template<typename T>
    void QuickSort3ways(T arr[], int n)
    {
        srand(NULL);
        Sub_QuickSort3ways(arr, 0, n - 1);
    }
    
    template<typename T>
    void Sub_QuickSort3ways(T arr[], int L, int R)
    {
        if (R <= L)
        {
            return;
        }
        swap(arr[L], arr[rand() % (R - L + 1) + L]);
        T v = arr[L];
    
        int lt = L;
        int gt = R + 1;
        int i = L + 1;
        while (i < gt)
        {
            if (arr[i] < v)
            {
                swap(arr[i], arr[lt + 1]);
                lt++;
                i++;
            }
            else if (arr[i] > v)
            {
                swap(arr[i], arr[gt - 1]);
                gt--;
            }
            else
                i++;
        }
    
        swap(arr[L], arr[lt]);
    
        Sub_QuickSort3ways(arr, L, lt - 1);
        Sub_QuickSort3ways(arr, gt, R);
    }
    
    int * GenerateRandomArray(int n, int n1, int n2)
    {
        int *pArr = new int[n];
        for (int i = 0;i < n;i ++)
        {
            pArr[i] = (rand() % n2);
        }
        return pArr;
    }
    
    int main()
    {
        int n = 10;
        int *arr1 = GenerateRandomArray(n, 0, n);
    
        //TimeTest("Quick Sort 3 Ways", QuickSort3ways, arr1, n);
        QuickSort3ways(arr1,n);
        delete[] arr1;
    
        system("pause");
    
        return 0;
    } 
    
    评论

报告相同问题?

悬赏问题

  • ¥15 如何让企业微信机器人实现消息汇总整合
  • ¥50 关于#ui#的问题:做yolov8的ui界面出现的问题
  • ¥15 如何用Python爬取各高校教师公开的教育和工作经历
  • ¥15 TLE9879QXA40 电机驱动
  • ¥20 对于工程问题的非线性数学模型进行线性化
  • ¥15 Mirare PLUS 进行密钥认证?(详解)
  • ¥15 物体双站RCS和其组成阵列后的双站RCS关系验证
  • ¥20 想用ollama做一个自己的AI数据库
  • ¥15 关于qualoth编辑及缝合服装领子的问题解决方案探寻
  • ¥15 请问怎么才能复现这样的图呀