快速排序算法不起作用

Posted

技术标签:

【中文标题】快速排序算法不起作用【英文标题】:Quicksort algorithm not working 【发布时间】:2016-02-02 15:41:10 【问题描述】:

所以这是我第一次在 *** 中发帖

我试图实现快速排序算法,但是当我编译代码并尝试运行它时挂起

这是代码

#include <iostream>
using namespace std;

void swap(int& num1,int& num2)

    int temp = num2;
    num2 = num1;
    num1 = temp;


int partitionTest(int arr[],int p,int r)

    int i = p;
    for(int j =p ;j<r-1;j++)
    
        if(arr[j]> arr[r-1])
        
            i++;
            swap(arr[j],arr[r-1]);
        
        swap(arr[i],arr[r]);
        return i;
    


void quicksort(int arr[],int p,int r )

    if (p < r)
    
        int temp = partitionTest( arr, p, r );
        quicksort( arr, p, temp - 1 );
        quicksort( arr, temp + 1, r );
    




int main()

    int arr[5]=5,4,3,2,1;

    quicksort(arr,0,4);

    cout << arr[0] << " ";
    cout << arr[1] << " ";

我将不胜感激任何形式的帮助

【问题讨论】:

您可能应该考虑使用调试器单步执行您的代码,以查看错误发生的位置并查看当时的程序状态。 在循环中返回某些内容将停止循环并离开该方法,您将无条件调用它。 您将在每个 forloop 的第一次迭代中返回 您似乎还没有决定r 是最大有效索引还是“过去”是最大有效索引。 (首先测试你的分区函数。) 【参考方案1】:

三个递归到 quicksort(),p=3 和 r=4。 partitionTest() 中的 for 条件表示如果 j

【讨论】:

以上是关于快速排序算法不起作用的主要内容,如果未能解决你的问题,请参考以下文章

递归深度截止策略:并行快速排序

面试必备排序算法 --快速排序

算法篇:快速排序

双路快速排序法

快速排序分区功能

matlab ——快速排序算法可视化