C++版数据结构快速排序代码,求纠错。。。看了好久实在看不出问题来,没有正常输出。。书上是用的模板,还不怎么会
C++版数据结构快速排序代码,求纠错。。。
看了好久实在看不出问题来,没有正常输出。。书上是用的模板,还不怎么会,所以改成下面的样子了,
- C/C++ code
#include<iostream>using namespace std ;bool swap(int A[],int i,int j){ int temp = A[i]; A[i] = A[j]; A[j] =temp;}int partition(int A[],int l,int r,int &pivot){ do { while (A[l]<pivot) ++l; while (A[r]<pivot&&(r!=0)) --r; swap(A,l,r); } while(l<r); swap(A,l,r); return l;}void qsort(int A[],int i,int j){ if (j<=1) return ; int pivot = A[(i+j)/2 ] ; swap(A,pivot,j); int k = partition(A,i-1,j,A[j]); swap(A,k,j); qsort(A,i,k-1); qsort(A,k+1,j);}int main(){ int A[8]={'\0'}; for (int i=0;i!=8;i++) cin>> A[i]; qsort(A,0,7); for(int i=0;i!=8;i++) cout<<A[i]<<" "; return 0;}[解决办法]
- C/C++ code
#include<iostream>using namespace std ;bool swap(int A[], int i, int j){ int temp = A[i]; A[i] = A[j]; A[j] = temp;}int partition(int A[], int l, int r, int& pivot){ do { while(l<r&&A[l] < pivot) ++l; while((r > l && A[r] > pivot)) --r; //changed swap(A,l,r); } while(l < r); return l;}void qsort(int A[], int i, int j){ if(j <= i) return ; //changed int pivot = A[(i+j)/2 ] ; swap(A, (i + j) / 2, j); //changed int k = partition(A, i, j, A[j]);//changed // swap(A, k, j); qsort(A, i, k - 1); qsort(A, k + 1, j);}int main(){ int A[8] = {1, 2, 3, 5, 4, 7, 6, 0}; // for (int i=0;i!=8;i++) cin>> A[i]; qsort(A, 0, 7); for(int i = 0; i != 8; i++) cout << A[i] << " "; return 0;} 