首页 > 代码库 > 快速排序算法昨晚实现了,,,,但是有个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
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。