首页 > 代码库 > 快速排序算法昨晚实现了,,,,但是有个BUG

快速排序算法昨晚实现了,,,,但是有个BUG

昨天晚上写好了归并排序的算法,后来就趁热打铁,开始写快速排序算法,代码是越写越熟练,越写越来劲。昨天晚上也就写出来了快速排序算法。

但是在我测试的时候先后出现一些问题:

第一个问题:

1)输入 1 2 3 4 5 6 7  -1时,排序结果2 1 5 6 7 3什么什么的,但是输入8 7 6 5 4 3 2 1 -1时,倒是能排得好好的。天哪,脑袋记不清了,,,我竟然忘了我修改那个地方了,,,真是悲催。我把它修改好了。(应该是修改了,分成两段的过程中,数组小标大小的限时,之前应该没有加左边的下标小于右边的下标)

while(array[n1]<array[p]&&n1<=n2)	n1++;while(array[n2]>array[p]&&n2>=n1)	n2--; 

现在好了,不管输入1 2 3 还是 3 2 1 还是2 3 1等,都能很对得输出。其实还有个bug,我先上代码,然后接着写。

#include<iostream>using namespace std;int vector_initial(int *array);void vector_print(int *array,int n);void fast_sort(int *array,int p,int r);int separate_2part(int *array,int p,int r);int main(){	int a[100];	int n;	n=vector_initial(a);	fast_sort(a,0,n);	vector_print(a,n);	return 0;}int vector_initial(int *array){	int i=0;	cin>>array[i];	while(array[i]!=-1)	{		i++;		cin>>array[i];	}	return i-1;}void vector_print(int *array,int n){	if(array[0]==-1)		return;	for(int i=0;i<=n-1;i++)		cout<<array[i]<<" ";	cout<<array[n]<<endl;}void fast_sort(int *array,int p,int r){	int v,tempdata;	if(r>p)	{		v=separate_2part(array,p,r);		fast_sort(array,p,v-1);		fast_sort(array,v+1,r);	}	}int separate_2part(int *array,int p,int r){		int n1,n2,tempdata;	n1=p;	n2=r;	while(n2>n1)	{		while(array[n1]<array[p]&&n1<=n2)			n1++;		while(array[n2]>array[p]&&n2>=n1)			n2--;		if(n1!=n2)		{			tempdata=http://www.mamicode.com/array[n1];>

  现在的问题是:

不能输入两个相同的数,一旦输入的数组中,有两个或多个相同时,程序就进入死循环。我昨晚调试了,单步跟踪到

int separate_2part(int *array,int p,int r)这个函数里,在下面这个循环里出不来了:
	while(n2>n1)	{		while(array[n1]<array[p]&&n1<=n2)			n1++;		while(array[n2]>array[p]&&n2>=n1)			n2--;		if(n1!=n2)		{			tempdata=http://www.mamicode.com/array[n1];>

  最后,始终是~~~~~始终是~是n2比n1大,我忘了到底是大1还是大2了,,我先把代码贴上,我写会儿作业,晚上接着搞!



快速排序算法昨晚实现了,,,,但是有个BUG