根據老師講的思路寫的,沒有百度,所以也不知道完不完全正確,但目前測試都還好,都可以正常排序。 1 #include <iostream> 2 using namespace std; 3 4 void quickSort(double *q ,int n) //一個double型數組還有一個代表這個 ...
根據老師講的思路寫的,沒有百度,所以也不知道完不完全正確,但目前測試都還好,都可以正常排序。
1 #include <iostream> 2 using namespace std; 3 4 void quickSort(double *q ,int n) //一個double型數組還有一個代表這個數組的位數。 5 { 6 7 double *left,*right; 8 left = &q[0]; 9 right = &q[n-1]; 10 double middle = q[0]; 11 // cout<<"left指向數組第一位,值為"<<*left<<endl; 12 // cout<<"right指向數組最右一位,值為"<<*right<<endl; 13 while(left != right) 14 { 15 if (*right < middle) 16 { 17 *left = *right; 18 while (*left < middle) 19 { 20 left++; 21 if (left == right) 22 { 23 break; 24 } 25 } 26 *right = *left; 27 } else { 28 right--; 29 } 30 31 } 32 //左右指針指向一致時把middle給這個位置 33 *left = middle; 34 35 //接下來取得*left和*right指向數組的位數 36 int count = 0; //count1表示有count1個數在middle左邊,最小為0 37 for(;q[count]<middle;count++) { } 38 // 39 //處理middle的左邊 40 if (count>1) 41 { 42 double *qq = new double[count]; 43 qq = q; 44 quickSort(qq,count); 45 } 46 47 //處理middle的右邊 48 int count2 = n-count-1; //count2表示有count2個數在middle右邊,最小為0 49 if (count2 > 1) 50 { 51 double *ww = new double[count2]; 52 ww = left+1; 53 quickSort(ww,count2); 54 } 55 56 } 57 58 59 int main() { 60 cout<<"請輸入數組長度"; 61 int n; 62 cin>>n; 63 double *p = new double[n]; 64 for (int i = 0;i<n;i++) 65 { 66 cin>>p[i]; 67 } 68 69 quickSort(p,n); 70 71 for (int xxx = 0;xxx<n;xxx++) 72 { 73 cout<<p[xxx]<<" "; 74 } 75 return 0; 76 }