/*<br /> * 冒泡排序<br /> */<br />void BubbleSort(int arr[], int n)<br />{<br />int temp;</p><p>for (int i = 0; i < n - 1; i++)<br />{<br />for (int j = i + 1; j < n; j++)<br />{<br />if (arr[i] > arr[j])<br />{<br />temp = arr[i];<br />arr[i] = arr[j];<br />arr[j] = temp;<br />}<br />}<br />}<br />}</p><p>/*<br /> * 選擇排序<br /> */<br />void ChooseSort(int arr[], int n)<br />{<br />int temp, k;</p><p>for (int i = 0; i < n - 1; i++)<br />{<br />k = i;<br />for (int j = i + 1; j < n; j++)<br />{<br />if (arr[k] > arr[j])<br />{<br />k = j;<br />}<br />}</p><p>if (k != i)<br />{<br />temp = arr[i];<br />arr[i] = arr[k];<br />arr[k] = temp;<br />}<br />}<br />}</p><p>/*<br /> * 快速排序,官方原版<br /> */<br />void q_sort(int numbers[], int left, int right)<br />{<br />int pivot, l_hold, r_hold;</p><p>l_hold = left;<br />r_hold = right;<br />pivot = numbers[left];<br />while (left < right)<br />{<br />while ((numbers[right] >= pivot) && (left < right))<br />{<br />right--;<br />}<br />if (left != right)<br />{<br />numbers[left] = numbers[right];<br />left++;<br />}<br />while ((numbers[left] <= pivot) && (left < right))<br />{<br />left++;<br />}<br />if (left != right)<br />{<br />numbers[right] = numbers[left];<br />right--;<br />}<br />}<br />numbers[left] = pivot;<br />pivot = left;<br />left = l_hold;<br />right = r_hold;<br />if (left < pivot)<br />{<br />q_sort(numbers, left, pivot-1);<br />}<br />if (right > pivot)<br />{<br />q_sort(numbers, pivot+1, right);<br />}<br />}</p><p>/*<br /> * 快速排序<br /> */<br />void quick_sort(int *x, int low, int high)<br />{<br />int i, j, t;</p><p>if (low < high) /*要排序的元素起止下標,保證小的放在左邊,大的放在右邊。這裡以下標為low的元素為基準點*/<br />{<br />i = low;<br />j = high;<br />t = *(x+low); /*暫存基準點的數*/</p><p>while (i<j) /*迴圈掃描*/<br />{<br />while (i<j && *(x+j)>t) /*在右邊的只要比基準點大仍放在右邊*/<br />{<br />j--; /*前移一個位置*/<br />}</p><p>if (i<j)<br />{<br />*(x+i) = *(x+j); /*上面的迴圈退出:即出現比基準點小的數,替換基準點的數*/<br />i++; /*後移一個位置,並以此為基準點*/<br />}</p><p>while (i<j && *(x+i)<=t) /*在左邊的只要小於等於基準點仍放在左邊*/<br />{<br />i++; /*後移一個位置*/<br />}</p><p>if (i<j)<br />{<br />*(x+j) = *(x+i); /*上面的迴圈退出:即出現比基準點大的數,放到右邊*/<br />j--; /*前移一個位置*/<br />}<br />}</p><p>*(x+i) = t; /*一遍掃描完後,放到適當位置*/<br />quick_sort(x,low,i-1); /*對基準點左邊的數再執行快速排序*/<br />quick_sort(x,i+1,high); /*對基準點右邊的數再執行快速排序*/<br />}<br />}</p><p>// 輸出數組元素<br />void outArray(int arr[], int n)<br />{<br />for(int i = 0; i < n; i++)<br />{<br />cout<<arr[i]<<" ";<br />}<br />cout<<endl;<br />}</p><p>void main()<br />{<br />const int N = 5;<br />int arr1[N] = {4, 3, 5, 2, 1};<br />int arr2[N] = {4, 3, 5, 2, 1};<br />int arr3[N] = {4, 3, 5, 2, 1};</p><p>cout<<"Before bubble sort"<<endl;<br />outArray(arr1, N);</p><p>BubbleSort(arr1, N);</p><p>cout<<"After bubble sort"<<endl;<br />outArray(arr1, N);</p><p>cout<<"/nBefore chooose sort"<<endl;<br />outArray(arr2, N);</p><p>ChooseSort(arr2, N);</p><p>cout<<"After chooose sort"<<endl;<br />outArray(arr2, N);</p><p>cout<<"/nBefore quick sort"<<endl;<br />outArray(arr3, N);</p><p>//q_sort(arr3,0, N - 1);<br />quick_sort(arr3,0, N - 1);</p><p>cout<<"After quick sort"<<endl;<br />outArray(arr3, N);</p><p>system("pause");<br />}