@@ -110,16 +110,16 @@ public class Main {
110
110
}
111
111
quickSort(nums, 0 , n - 1 );
112
112
for (int i = 0 ; i < n; ++ i) {
113
- System . out. printf( " %d " , nums[i]);
113
+ System . out. print( nums[i] + " " );
114
114
}
115
115
}
116
-
116
+
117
117
public static void quickSort (int [] nums , int left , int right ) {
118
118
if (left >= right) {
119
119
return ;
120
120
}
121
121
int i = left - 1 , j = right + 1 ;
122
- int x = nums[left];
122
+ int x = nums[( left + right) >> 1 ];
123
123
while (i < j) {
124
124
while (nums[++ i] < x);
125
125
while (nums[-- j] > x);
@@ -291,81 +291,36 @@ fn main() -> io::Result<()> {
291
291
292
292
``` cpp
293
293
#include < iostream>
294
- #include < vector>
295
294
296
295
using namespace std ;
297
- void printvec ( const vector<int > &vec, const string &strbegin = "", const string &strend = "" )
298
- {
299
- cout << strbegin << endl;
300
- for ( auto val : vec )
301
- {
302
- cout << val << "\t";
303
- }
304
296
305
- cout << endl;
306
- cout << strend << endl;
307
- }
297
+ const int N = 1e6 + 10 ;
308
298
299
+ int n;
300
+ int nums[N];
309
301
310
- int partition( vector< int > & vec , int left, int right )
302
+ void quick_sort ( int nums [ ] , int left, int right)
311
303
{
312
- if ( left >= right )
313
- {
314
- return left;
315
- }
316
-
317
- int base = vec[left];
318
- while ( left < right )
319
- {
320
- while ( left < right && vec[right] >= base )
321
- {
322
- right--;
323
- }
324
- if ( left >= right )
325
- {
326
- break;
327
- }
328
-
329
- vec[left] = vec[right];
330
-
331
- while ( left < right && vec[left] <= base )
332
- {
333
- left++;
334
- }
335
-
336
- if ( left >= right )
337
- {
338
- break;
339
- }
340
-
341
- vec[right] = vec[left];
342
- }
343
-
344
- vec[left] = base;
345
- return left;
346
- }
347
-
348
-
349
- void quicksort( vector<int > & vec, int left, int right )
350
- {
351
- if ( left >= right )
352
- {
353
- return;
354
- }
355
-
356
- int idx = partition( vec, left, right );
357
- quicksort( vec, left, idx - 1 );
358
- quicksort( vec, idx + 1, right );
304
+ if (left >= right) return;
305
+ int i = left - 1, j = right + 1;
306
+ int x = nums[ left + right >> 1] ;
307
+ while (i < j)
308
+ {
309
+ while (nums[ ++i] < x);
310
+ while (nums[ --j] > x);
311
+ if (i < j) swap(nums[ i] , nums[ j] );
312
+ }
313
+ quick_sort(nums, left, j);
314
+ quick_sort(nums, j + 1, right);
359
315
}
360
316
361
-
362
- int main( void )
317
+ int main()
363
318
{
364
- vector< int > vec = { 9, 8, 7, 6, 5, 4, 3, 2, 1, 0 } ;
365
- printvec( vec );
366
- quicksort( vec, 0, vec.size() - 1 );
367
- printvec( vec, "after insert sort" );
368
- return 0 ;
319
+ int n ;
320
+ scanf("%d", &n );
321
+ for (int i = 0; i < n; ++i) scanf("%d", &nums [ i ] );
322
+ quick_sort(nums, 0, n - 1 );
323
+ for (int i = 0; i < n; ++i) printf("%d ", nums [ i ] ) ;
369
324
}
370
325
```
371
326
0 commit comments