哪位高手能不能帮忙看看C++递归的方法实现快速排序哪里出了问题啊?

C++语言 码拜 9年前 (2015-11-08) 951次浏览
#include <iostream>
using namespace std;
const int arsize=10;
int array[arsize]={10,25,6,58,97,43,2,3,98,17};
void quicksort(int array[],int i,int j);
int partition(int array[],int i,int j);
void swap(int a ,int b);
int main()
{
quicksort(array, 0,9);
for(int m=0;m<arsize;m++)
cout<<array[m]<<endl;
system(“pause”);
return 0;
}
void quicksort(int array[],int L,int R)
{
if(L<R)
{
int pos=partition(array,L,R);
quicksort(array,L,pos-1);
quicksort(array,pos+1,R);
}
}
int partition(int array[],int i,int j)
{
int base=array[i];
while(i<j&&array[j]>=base)
j–;
array[i]=array[j];
array[j]=base;
//当遇到第一个比base大的数时,交换
while(i<j&&array[i]<base)
i++;
array[j]=array[i];
array[i]=base;
return i;
}
解决方案:10分
#include <iostream>
using namespace std;
const int arsize=10;
int array[arsize]={10,25,6,58,97,43,2,3,98,17};
void quicksort(int array[],int i,int j);
int partition(int array[],int i,int j);
void swap(int a ,int b);
int main()
{
	quicksort(array, 0,9);
	for(int m=0;m<arsize;m++)
		cout<<array[m]<<endl;
	system("pause");
	return 0;
}
void quicksort(int array[],int L,int R)
{ 
	if(L<R)
	{
		int pos=partition(array,L,R);
		quicksort(array,L,pos-1);
		quicksort(array,pos+1,R);
	}
}
int partition(int array[],int i,int j)
{
	int base=i;
	while(i<j&&array[j]>=base)
		j--;
	array[i]=array[j];
	array[j]=base;
	//当遇到第一个比base大的数时,交换
	while(i<j&&array[i]<base)
		i++;
	array[j]=array[i];
	array[i]=base;
	return i;
}
解决方案:10分
while(i<j){
while(i<j&&array[j]>=base)
j–;
array[i]=array[j];
array[j]=base;
//当遇到第一个比base大的数时,交换
while(i<j&&array[i]<base)
i++;
array[j]=array[i];
array[i]=base;
}

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明哪位高手能不能帮忙看看C++递归的方法实现快速排序哪里出了问题啊?
喜欢 (0)
[1034331897@qq.com]
分享 (0)