1 #include"header_file.h" 2 using namespace std; 3 4 void swap(int a,int b) 5 { 6 int t; 7 t=a; 8 a=b; 9 b=t;10 }11 12 void quick_sort(int a[],int low,int high)13 {14 15 if(low>=high)16 return;17 18 int first;19 int last;20 first=low;21 last=high;22 23 int x;24 x=a[low];25 26 27 while(low=x)30 {31 high--;32 } 33 swap(a[low],a[high]);34 35 cout< <<" "< <<" low"<<" "< < low+1)47 quick_sort(a,low+1,last);48 }49 50 int main(void)51 {52 int a[7]={ 4,3,6,7,2,1,5};53 quick_sort(a,0, sizeof(a) / sizeof(a[0]) - 1);54 55 cout<<"test"<
执行程序会发现在算法排序的地方无限循环,想了半天才知道是33和41行的位置,不管while循环是否执行都会执行swap语句。逻辑错误!
只能换种方法,改成大家最常见的那种就好了
1 void quick_sort(int a[],int low,int high) 2 { 3 4 if(low>=high) 5 return; 6 7 int first; 8 int last; 9 first=low;10 last=high;11 12 int x;13 x=a[low];14 15 16 while(low=x)19 {20 high--;21 } 22 a[low]=a[high];23 24 // cout< <<" "< <<" low"<<" "< < low+1)39 quick_sort(a,low+1,last);40 }
这里就不是交换了,直接赋值,然后最后给a[low]赋值。
很低级的错误