C++快速排序算法崩溃
C++ Quicksort Algorithm Crashing
我正在研究一种 c++ 快速排序算法,该算法计算排序过程中的重要操作数。它将正确排序 100 个值,但之后它会陷入无限循环。任何帮助将不胜感激!
快速排序.cpp
#include "QuickSort.h"
#include <algorithm>
using namespace std;
QuickSort::QuickSort(int max) : SortData(max)
{
/*
maxSize = max;
theData = new long[max];
*/
SortData::randomize(12);
}
QuickSort::~QuickSort(void)
{
}
_int64 QuickSort:: sort()
{
numops = 0;
quicksort(theData, 0, (size()-1));
return(numops);
}
//Include counting number of operations
void QuickSort::quicksort(long theData[], int left, int right)
{
//Default variables
if (size() <= 1 || left >= size() || right >= size()) return; //Bounds checking
if (left < right)
{
long pivot = partition(theData, left, right);
quicksort(theData, left, pivot-1);
quicksort(theData, pivot+1, right);
}
}
int QuickSort::partition(long theData[], int left, int right)
{
long pivot = theData[left];
while (true)
{
while (theData[left] < pivot) left++;
numops ++;
while (theData[right] > pivot) right--;
numops ++;
if (left < right)
{
swap(theData[left], theData[right]);
numops+=3;
}
else
{
return right;
}
}
}
//QuickSort.h
#pragma once
#include "SortData.h"
class QuickSort : public SortData
{
public:
QuickSort(int max = 100);
~QuickSort(void);
_int64 sort();
private:
_int64 numops;
void QuickSort::quicksort(long theData[], int left, int right);
int partition(long theData[], int left, int right);
};
在分区函数中
if (left < right)
总是正确的。因此,你得到了无限的while(true(循环。
并且 SortData.h 中的 size(( 函数可能存在问题,我们还看不到。
由于数据是随机的,因此您不时在某些输入集上看到问题。
轻微的修改必须有所帮助:
if (left <= right) {
if (left < right) {
swap(theData[left], theData[right]);
numops += 3;
}
left++;
right--;
}
else {
return right;
}
抱歉仔细检查:)
如果left < right
和theData[left] == theData[right]
,partition
就会卡住。
相关文章:
- 当回溯以零开始时,如何调试崩溃
- 为什么这个运算符<重载函数对 STL 算法不可见?
- 基于ELO的团队匹配算法
- 内联映射初始化的动态atexit析构函数崩溃
- 执行函数时导致崩溃的变量
- C++选择排序算法中的逻辑错误
- 有没有办法将谓词中的元素偏移量传递给 std 算法?
- C++A*算法并不总是在路径中具有目标节点
- 程序崩溃并显示"std::out_of_range"错误
- 排序算法c++
- CoInitialize()在单独的线程上崩溃而不返回
- 使用调试/崩溃报告将应用程序部署到客户端
- 排序算法问题(购买商店物品)(崩溃)
- 由于指针算法错误,代码在 memcpy 中崩溃
- C++堆排序算法在4100多个数据条目后崩溃
- 克鲁斯卡尔算法代码因未知原因而崩溃
- C++快速排序算法崩溃
- C++快速排序算法不断崩溃
- 是什么让这个算法崩溃了?
- 排序算法在试图打印列表信息时崩溃