@@ -186,18 +186,19 @@ int main() {
186
186
187
187
另一个写法
188
188
``` C++
189
- void QuickSort (std::vector<int > &nums,int l,int r) {
190
- if (l + 1 >= r) return;
191
- int first = l, last = r - 1 ,piv = nums[ first] ;
192
- while (first < last) {
193
- while (first < last && nums[ last] >= piv) last--;//右指针 从右向左扫描 将小于piv的放到左边
194
- nums[ first] = nums[ last] ;
195
- while (first < last && nums[ first] <= piv) first++;//左指针 从左向右扫描 将大于piv的放到右边
196
- nums[ last] = nums[ first] ;
197
- }
198
- nums[ first] = piv;//更新piv
199
- quick_sort(nums, l, first);//递归排序
200
- quick_sort(nums, first + 1, r);
189
+ void QuickSort (std::vector<int >& a, int left, int right) {
190
+ if (left >= right) return;
191
+ int piv = a[ left] ;
192
+ int l = left, r = right;
193
+ while (l < r) {
194
+ while(l < r && a[ r] >= piv) --r;//从右向左找到第一个小于x的 将小于piv的放到左边
195
+ if (l < r) a[ l++] = a[ r] ;
196
+ while (l < r && a[ l] <= piv) ++l;//从左向右找第一个大于x的数 将大于piv的放到右边
197
+ if (l < r) a[ r--] = a[ l] ;
198
+ }
199
+ a[ l] = piv;//更新piv
200
+ quickSort(a, left, l - 1);//递归排序
201
+ quickSort(a, l + 1, right);
201
202
}
202
203
```
203
204
@@ -247,6 +248,32 @@ void mergeSort(int a[],int L,int R) {
247
248
}
248
249
```
249
250
251
+ 另一种写法
252
+ ``` c++
253
+ void mergeCount (std::vector<int >& a, int left, int mid, int right) {
254
+ std::vector<int >tmp(left+mid+right, 0);
255
+ int i = left;
256
+ int j = mid + 1;
257
+ int k = 0;
258
+ while (i <= mid && j <= right) {
259
+ if (a[ i] < a[ j] ) tmp[ k++] = a[ i++] ;
260
+ else tmp[ k++] = a[ j++] ;
261
+ }
262
+ while (i <= mid) tmp[ k++] = a[ i++] ;
263
+ while (j <= right) tmp[ k++] = a[ j++] ;
264
+ for (int p = 0; p < k; ++p) {
265
+ a[ left + p] = tmp[ p] ;
266
+ }
267
+ }
268
+ void mergeSort(std::vector<int >& a, int left, int right) {
269
+ if (left >= right) return;
270
+ int mid = left + (right - left) / 2;
271
+ mergeSort(a, left, mid);
272
+ mergeSort(a, mid + 1, right);
273
+ mergeCount(a, left, mid, right);
274
+ }
275
+ ```
276
+
250
277
测试
251
278
252
279
```c++
0 commit comments