intpartition(vector<int>&arr, int i, int j){ int key = arr[i]; while (i < j) { while (i < j && arr[j] >= key) { j--; } if (i < j) { arr[i] = array[j]; } while (i < j && arr[i] <= key) { i++; } if (i < j) { arr[j] = array[i]; } } arr[i] = key; return i; }
第二种(从头到尾遍历一遍,把小于基准值的依次与最前面的交换)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
intpartition(vector<int> &arr, int l, int r) { int key = arr[l]; int j = l; for (int i = l + 1; i <= r; i++) { if (arr[i] < key) { j++; swap(arr[i], arr[j]); } } swap(arr[j], arr[l]); return j; }