快速排序代码问题

来源:百度知道 编辑:UC知道 时间:2024/05/24 12:01:39
下面是一段C++的快速排序代码 ,编译时总是报错,帮我告诉我哪里错了,说的尽量详细些,谢谢
#include<iostream>
using namespace std;
void Swap(int a,int b);
int Partition(int a[],int p,int r);
void QuickSort(int a[],int p,int r);

int main(){
int a[8]={4,12,34,5,6,7,8,43};
cout<<"排序之前的元素:";
for(int i=0;i<8;i++){
cout<<a[i]<<endl;
}
QuickSort(a,0,7);
cout<<"快速排序后元素依次为:" ;
for(int i=0;i<8;i++){
cout<<a[i];
}
return 0;
system("pause");
}
void Swap(int a,int b){
int c=a;
a=b;
b=c;
}
int Partition(int a[],int p,int r){
int i=p,j=r+1;
int x=a[p];
while(true){
while(a[i++]<x&&i<r);
while(a[j--]>x);
if(i>=j)break;

第一处错误:
for(int i=0;i<8;i++){
cout<<a[i]<<endl;
}
QuickSort(a,0,7);
cout<<"快速排序后元素依次为:" ;
for(int i=0;i<8;i++){
////////////////////////////////////////////
i定义了两次

第二处错误:
while(a[j--]>x);
///////////////////////////////////////////
如果从j从j到0,a[j]全都小于x,j就要变成负数,这样就超限了。

更改后如下:
#include<iostream>
using namespace std;
void Swap(int a,int b);
int Partition(int a[],int p,int r);
void QuickSort(int a[],int p,int r);

int main(){
int a[8]={4,12,34,5,6,7,8,43};
cout<<"排序之前的元素:";
for(int i=0;i<8;i++){
cout<<a[i]<<endl;
}
QuickSort(a,0,7);
cout<<"快速排序后元素依次为:" ;
for(i=0;i<8;i++){
cout<<a[i];
}
return 0;