c++實現快速排序
阿新 • • 發佈:2021-01-25
排序程式碼:
void quickSort(int a[], int left, int right) { if (left >= right) return; int i = left; int j = right; //記錄基準值 int base = a[left]; while (i < j) { //從右向左找小於基準值的數 while (i < j && a[j] >= base) j--; //從左向右找大於基準值的數 while (i < j && a[i] <= base) i++; //交換 if (i < j) std::swap(a[i], a[j]); } //基準值和中間i位置交換 a[left] = a[i]; a[i] = base; //此時i左側全部小於基準值,右側全部大於基準值,從i兩邊分別遞迴即可 quickSort(a, left, i - 1); quickSort(a, i + 1, right); }
測試:
int a[] = { 9,5,7,8,4,1,2,6,3,10 }; std::cout << "sort before:" << std::endl; for (size_t i = 0; i < 9; i++) std::cout << a[i] << " "; quickSort(a, 0, 9); std::cout << std::endl << "sort after:" << std::endl; for (size_t i = 0; i < 9; i++) std::cout << a[i] << " ";
輸出結果: