我正在编写一个基本的QuickSort方法,但是我无法找出代码中的错误。该程序返回的输入与经过排序功能后的输入相同。尽管我与其他Internet资源进行了交叉检查,但我还是试图自己找出错误,但Partition函数似乎出现了一些错误,但我'无法弄清楚到底是什么引起了错误。
下面是我的代码。
#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;
}
答案 0 :(得分:1)
void swap(int * n1, int * n2)
{ int temp = *n1; *n1=*n2; *n2=temp; }
交换必须按地址引用,并且不是有效值。否则将无法交换这些值。
在调用交换函数时,也按如下所示swap(&A[i] , &A[j])
答案 1 :(得分:1)
如果您使用Java进行这种编码,那么您也会遇到相同的问题。根本原因是,您在swap
函数中比较的值被按值传递给了该函数,而与按引用进行了相比。
请参考以下链接:C++: Argument Passing "passed by reference"
答案 2 :(得分:0)
实际上问题是,您在swap(int a,int b)
函数中发送了两个整数变量。
这些变量在它们之间交换价值。
但是您有一个包含此integer
值的数组。您需要传递数组以交换两个integer
基础位置。
您需要通过以下方式调用swap
函数:
void swap(vector<int> &A,int Pindex,int end){
int temp = A[Pindex];
A[Pindex]= A[end];
A[end]=temp;
}