algorithm - 实施快速排序时无法找出错误
问题描述
我正在编写一个基本的快速排序方法,但我无法找出代码中的错误。程序返回的输入与通过排序功能后相同。虽然我与其他互联网资源交叉检查了我的代码,但我试图自己找出错误,并且分区功能似乎有一些错误,但我'无法弄清楚究竟是什么导致了错误。
下面是我的代码。
#include<iostream>
#include<stdio.h>
#include<vector>
using namespace std;
void swap(int n1, int n2)
{
int temp = n1;
n1=n2;
n2=temp;
}
int Partition(vector<int> &A, int start, int end)
{
int pivot = A[end];
int Pindex = start;
for(int i=start;i<end;i++)
{
if(A[i]<=pivot)
{
swap(A[i],A[Pindex]);
Pindex++;
}
}
swap(A[Pindex],A[end]);
return Pindex;
}
void QuickSort(vector<int> &A, int start, int end)
{
if(start<end)
{
int Pindex = Partition(A,start,end);
// printf("Partition Index:%d \n",Pindex);
QuickSort(A,start,Pindex-1);
QuickSort(A,Pindex+1,end);
}
}
int main()
{
vector<int>A = {4,6,7,9,3,2,0,5};
cout<<"Before Sorting\n";
int length = A.size();
for(int i=0;i<length;i++)
{
printf("%d",A[i]);
}
printf("\n");
QuickSort(A,0,length-1);
cout<<"After Sorting:\n";
for(int i=0;i<length;i++)
{
printf("%d",A[i]);
}
return 0;
}
解决方案
如果你在 Java 中这样编码,你也会遇到同样的问题。根本原因是您在函数中比较的值是按值swap
传递给该函数的,与按引用进行比较。参考这个链接:C++: Argument Passing "passed by reference"
推荐阅读
- node.js - Angular Universal 不提供静态资源
- sql - 日期差异,SQL 中的两个变量
- bitmap - 我在哪里可以找到我的节点存储在硬盘上的 DHT 部分的位图
- database - 发生异常。PlatformException (PlatformException(-3, Permission denied, ))
- jquery - 如何使用 ajax 加载 jquery 完整日历?
- c - 快速选择不同的枢轴选择算法结果
- python - Python:为什么我的不和谐机器人会为单个命令打印多个输出?此外,我如何重新启动/关闭我的机器人?
- html - 将水平 div 垂直对齐
- c++ - C++:需要帮助理解运算符重载错误
- c++ - 在 std::launder 之前,std::vector 的所有实现都是不可移植的吗?