一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|

服務器之家 - 編程語言 - JAVA教程 - Java各種排序算法匯總(冒泡,選擇,歸并,希爾及堆排序等)

Java各種排序算法匯總(冒泡,選擇,歸并,希爾及堆排序等)

2020-01-21 15:15jdkleo JAVA教程

這篇文章主要介紹了Java各種排序算法,以大量實例形式匯總分析了Java常用的各種排序算法,包括冒泡排序、快速排序、堆排序、插入排序、希爾排序、選擇排序、歸并排序等,需要的朋友可以參考下

本文實例匯總了Java各種排序算法。分享給大家供大家參考,具體如下:

1. 冒泡排序:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
public class SortTest {
 public static void main(String[] args) {
  int[] a = {345,7,32,5,4,-1,3,12,23,110,45645,321,456,78,-1,78,78,32,444,345};
  show(a);
  bubbleSort(a);
  show(a);
 }
 private static void bubbleSort(int[] a) {
  for(int i=0;i<a.length-1;i++){
   for(int j=0;j<a.length-i-1;j++){
    if(a[j]>a[j+1]){
     int tmp = a[j];
     a[j] = a[j+1];
     a[j+1] = tmp;
    }
   }
  }
 }
 private static void show(int[] a) {
  System.out.println(Arrays.toString(a));
 }
}

2. 快速排序(無重復值):

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
public class SortTest {
 public static void main(String[] args) {
  int[] a = {345,7,32,5,4,3,12,23,110};
  show(a);
  quickSort(a,0,a.length-1);
  show(a);
 }
 private static void quickSort(int[] a, int start, int end) {
  if (start>=end)
   return;
  int i=start;
  int j=end;
  int index = start;
  while(i<j){
   while(a[j]>a[index]){
    j--;
   }
   index = swap(a,j,index);
   while(a[index]>a[i]){
    i++;
   }
   index = swap(a,i,index);
  }
  quickSort(a, start, index-1);
  quickSort(a, index+1, end);
 }
 private static int swap(int[] a, int n, int index) {
  int tmp = a[n];
  a[n] = a[index];
  a[index] = tmp;
  return n;
 }
 private static void show(int[] a) {
  System.out.println(Arrays.toString(a));
 }
}

3. 快速排序(可含重復值)

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
public class SortTest {
 public static void main(String[] args) {
  int[] a = {345,7,32,5,4,-1,3,12,23,110,45645,321,456,78,-1,78,78,32,345};
  show(a);
  quickSort2(a,0,a.length-1);
  show(a);
 }
 private static void quickSort2(int[] a, int start, int end) {
  if (start>=end)
   return;
  int i=start;
  int j=end;
  int index = end;
  while(i<j){
   while(a[j]>a[index]){
    j--;
   }
   if (j!=index && a[j]==a[index]){
    index = swap(a,--j,index);
   }else{
    index = swap(a,j,index);
   }
   while(a[index]>a[i]){
    i++;
   }
   if (i!=index && a[i]==a[index]){
    index = swap(a,++i,index);
   }else{
    index = swap(a,i,index);
   }
  }
  quickSort2(a, start, index-1);
  quickSort2(a, index+1, end);
 }
 private static int swap(int[] a, int n, int index) {
  int tmp = a[n];
  a[n] = a[index];
  a[index] = tmp;
  return n;
 }
 private static void show(int[] a) {
  System.out.println(Arrays.toString(a));
 }
}

4. 堆排序

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
public class SortTest {
 public static void main(String[] args) {
  int[] a = {345,7,32,5,4,-1,3,12,23,110,45645,321,456,78,-1,78,78,32,444,345};
  show(a);
  heapSort(a);
  show(a);
 }
 private static void heapSort(int[] a) {
  //建立最大堆
  int size = a.length;
  for(int i=size/2-1;i>=0;i--){
   createBigHeap(a,i,size-1);
  }
  //排序
  for(int j=0;j<size-1;j++){
   int tmp=a[0];
   a[0]=a[size-1-j];
   a[size-1-j]=tmp;
   createBigHeap(a,0,size-2-j);
  }
 }
 private static void createBigHeap(int[] a, int start, int end) {
  int tmp = a[start];
  int j = 2*start+1;
  while(j<=end){
   if (j<end && a[j]<a[j+1]){
    j++;
   }
   if (a[j]>tmp){
    a[start] = a[j];
    start = j;
    j = 2*j+1;
   }else{
    break;
   }
  }
  a[start] = tmp;
 }
 private static void show(int[] a) {
  System.out.println(Arrays.toString(a));
 }
}

5. 插入排序

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
public class SortTest {
 public static void main(String[] args) {
  int[] a = {345,7,32,5,4,-1,3};
  show(a);
  insertSort(a);
  show(a);
 }
 private static void insertSort(int[] a) {
  for(int i=0;i<a.length-1;i++){
   int n = i+1;
   int tmp = a[n];
   for(int j=i;j>=0;j--){
    if(tmp<a[j]){
     a[n] = a[j];
     n=j;
    }
   }
   if (a[n]!=tmp)
    a[n] = tmp;
  }
 }
 private static void show(int[] a) {
  System.out.println(Arrays.toString(a));
 }
}

6. 折半插入排序

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
public class SortTest {
 public static void main(String[] args) {
  int[] a = {345,7,7,345,2,2,7,2,7,23,2,345,7,32,5,4,-1,3,7,2,3,2,3,4,2,1,2,4,5,3,345,3,2};
  show(a);
  insertSort2(a);
  show(a);
 }
 private static void insertSort2(int[] a) {
   for(int i=0;i<a.length-1;i++){ 
    int n = i+1;
    int tmp = a[n]; 
    if (tmp>a[i])
     continue;
    int low = 0;
    int high = i;
    int mid = (high+low)/2;
    while(high>=low){
     mid = (high+low)/2;
     if(tmp<a[mid]){ 
      high = mid -1;
     }else if(tmp>a[mid]){
      low = mid + 1;
     } else{
      low=mid;
      break;
     }
    }
    for(int j=n;j>mid;j--){
     a[j] = a[j-1];
    }
    a[low] = tmp;
   
 }
 private static void show(int[] a) {
  System.out.println(Arrays.toString(a));
 }
}

7. 希爾排序

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
public class SortTest {
 public static void main(String[] args) {
  int[] a = {345,7,32,5,4,-1,3,2,3,5,7,8,90,1};
  show(a);
  shellSort(a);
  show(a);
 }
 private static void shellSort(int[] a) {
  shellSort(a,a.length);
 }
 private static void shellSort (int[] a, int n){
   int i, j, k, temp, gap;
   int[] gaps = { 1,5,13,43,113,297,815,1989,4711,11969,27901,84801,
      213331,543749,1355339,3501671,8810089,21521774,
      58548857,157840433,410151271,1131376761,2147483647 };
   for (k=0; gaps[k]<n; k++);
   while (--k >= 0){
    gap = gaps[k];
    for (i=gap; i<n; i++){
     temp = a[i];
     j = i;
     while (j>=gap && a[j-gap]>temp){
      a[j] = a[j-gap];
      j = j-gap;
     }
     a[j] = temp;
    }
   }
  }
 private static void show(int[] a) {
  System.out.println(Arrays.toString(a));
 }
}

8. 選擇排序

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
public class SortTest {
 public static void main(String[] args) {
  int[] a = {345,7,32,5,4,-1};
  show(a);
  selectSort(a);
  show(a);
 }
 private static void selectSort(int[] a) {
  for (int i = 0; i < a.length-1; i++) {
   int min = i;
   for (int j = i+1; j < a.length; j++) {
    if (a[j]<a[min])
     min = j;
   }
   if (min!=i){
    int tmp = a[i];
    a[i] = a[min];
    a[min] = tmp;
   }
  }
 }
 private static void show(int[] a) {
  System.out.println(Arrays.toString(a));
 }
}

9. 歸并排序

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
public class SortTest {
 public static void main(String[] args) {
  int[] a = {345,7,32,5,4,-1,3,2,3,5,7,8,90,1,432,1};
  show(a);
  mergeSort(a);
  show(a);
 }
 private static void mergeSort(int[] a) {
  //找出中間值
  int mid = a.length/2;
  //申請空間存儲中間索引以左的值
  int[] left = setValue(a,0,mid);
  if (left.length>1){//繼續拆分左邊,直到元素值為1個
   mergeSort(left);
  }
  //申請空間存儲中間索引以右的值
  int[] right = setValue(a,mid,a.length);
  if (right.length>1){//繼續拆分右邊,直到元素值為1個
   mergeSort(right);
  }
  //將左右值合并
  merge(a,left,right);
 }
 private static void merge(int[] a , int[] left, int[] right) {
  int i=0,j=0,k=0;
  for(;i<left.length && j<right.length;){
   if (left[i]<right[j]){
    a[k++] = left[i++];
   }else{
    a[k++] = right[j++];
   }
  }
  for(;i<left.length;i++){
   a[k++] = left[i];
  }
  for(;j<right.length;j++){
   a[k++] = right[j];
  }
 }
 private static int[] setValue(int[] a, int start,int length) {
  int[] x = new int[length-start];
  for (int i = 0; i < x.length; i++) {
   x[i] = a[start++];
  }
  return x;
 }
 private static void show(int[] a) {
  System.out.println(Arrays.toString(a));
 }
}

匯總:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
public class SortUtil {
 public final static int DESC = -1;
 public final static int ASC = 1;
 /**
  * 冒泡排序
  * @param a sort Array
  * @param sort SortUtil.ASC,SortUtil.DESC
  */
 public static void bubbleSort(int[] a,int sort) {
  if (sort==ASC)
   bubbleSortAsc(a);
  else
   bubbleSortDesc(a);
 }
 public static void bubbleSortAsc(int[] a) {
  for(int i=0;i<a.length-1;i++){
   for(int j=0;j<a.length-i-1;j++){
    if(a[j]>a[j+1]){
     int tmp = a[j];
     a[j] = a[j+1];
     a[j+1] = tmp;
    }
   }
  }
 }
 public static void bubbleSortDesc(int[] a) {
  for(int i=0;i<a.length-1;i++){
   for(int j=0;j<a.length-i-1;j++){
    if(a[j]<a[j+1]){
     int tmp = a[j];
     a[j] = a[j+1];
     a[j+1] = tmp;
    }
   }
  }
 }
// ----------------華-麗-的-功-能-分割-線-----------------------
 /**
  * 快速排序(不允許有重復值)
  *
  * @param a sort Array
  * @param sort SortUtil.ASC,SortUtil.DESC
  */
 public static void quickNoRepeatSort(int[] a,int sort) {
  if (sort==ASC)
   quickNoRepeatSortAsc(a, 0, a.length-1);
  else
   quickNoRepeatSortDesc(a, 0, a.length-1);
 }
 private static void quickNoRepeatSortAsc(int[] a, int start, int end) {
  if (start >= end)
   return;
  int i = start;
  int j = end;
  int index = start;
  while (i < j) {
   while (a[j] > a[index]) {
    j--;
   }
   index = swap(a, j, index);
   while (a[index] > a[i]) {
    i++;
   }
   index = swap(a, i, index);
  }
  quickNoRepeatSortAsc(a, start, index - 1);
  quickNoRepeatSortAsc(a, index + 1, end);
 }
 private static void quickNoRepeatSortDesc(int[] a, int start, int end) {
  if (start >= end)
   return;
  int i = start;
  int j = end;
  int index = start;
  while (i < j) {
   while (a[j] < a[index]) {
    j--;
   }
   index = swap(a, j, index);
   while (a[index] < a[i]) {
    i++;
   }
   index = swap(a, i, index);
  }
  quickNoRepeatSortDesc(a, start, index - 1);
  quickNoRepeatSortDesc(a, index + 1, end);
 }
 /**
  * 快速排序(允許有重復值)
  *
  * @param a sort Array
  * @param sort SortUtil.ASC,SortUtil.DESC
  */
 public static void quickSort(int[] a,int sort) {
  if (sort==ASC)
   quickSortAsc(a, 0, a.length-1);
  else
   quickSortDesc(a, 0, a.length-1);
 }
 private static void quickSortAsc(int[] a, int start, int end) {
  if (start >= end)
   return;
  int i = start;
  int j = end;
  int index = end;
  while (i < j) {
   while (a[j] > a[index]) {
    j--;
   }
   if (j != index && a[j] == a[index]) {
    index = swap(a, --j, index);
   } else {
    index = swap(a, j, index);
   }
   while (a[index] > a[i]) {
    i++;
   }
   if (i != index && a[i] == a[index]) {
    index = swap(a, ++i, index);
   } else {
    index = swap(a, i, index);
   }
  }
  quickSortAsc(a, start, index - 1);
  quickSortAsc(a, index + 1, end);
 }
 private static void quickSortDesc(int[] a, int start, int end) {
  if (start >= end)
   return;
  int i = start;
  int j = end;
  int index = end;
  while (i < j) {
   while (a[j] < a[index]) {
    j--;
   }
   if (j != index && a[j] == a[index]) {
    index = swap(a, --j, index);
   } else {
    index = swap(a, j, index);
   }
   while (a[index] < a[i]) {
    i++;
   }
   if (i != index && a[i] == a[index]) {
    index = swap(a, ++i, index);
   } else {
    index = swap(a, i, index);
   }
  }
  quickSortDesc(a, start, index - 1);
  quickSortDesc(a, index + 1, end);
 }
 private static int swap(int[] a, int n, int index) {
  int tmp = a[n];
  a[n] = a[index];
  a[index] = tmp;
  return n;
 }
// ----------------華-麗-的-功-能-分割-線------------------
 /**
  * 堆排序
  *
  * @param a sort Array
  * @param sort SortUtil.ASC,SortUtil.DESC
  */
 public static void heapSort(int[] a,int sort){
  if (sort==ASC)
   heapSortAsc(a);
  else
   heapSortDesc(a);
 }
 public static void heapSortAsc(int[] a) {
  // 建立最大堆
  int size = a.length;
  for (int i = size / 2 - 1; i >= 0; i--) {
   createBigHeap(a, i, size - 1);
  }
  // 排序
  for (int j = 0; j < size - 1; j++) {
   int tmp = a[0];
   a[0] = a[size - 1 - j];
   a[size - 1 - j] = tmp;
   createBigHeap(a, 0, size - 2 - j);
  }
 }
 private static void createBigHeap(int[] a, int start, int end) {
  int tmp = a[start];
  int j = 2 * start + 1;
  while (j <= end) {
   if (j < end && a[j] < a[j + 1]) {
    j++;
   }
   if (a[j] > tmp) {
    a[start] = a[j];
    start = j;
    j = 2 * j + 1;
   } else {
    break;
   }
  }
  a[start] = tmp;
 }
 public static void heapSortDesc(int[] a) {
  // 建立最小堆
  int size = a.length;
  for (int i = size / 2 - 1; i >= 0; i--) {
   createSmallHeap(a, i, size - 1);
  }
  // 排序
  for (int j = 0; j < size - 1; j++) {
   int tmp = a[0];
   a[0] = a[size - 1 - j];
   a[size - 1 - j] = tmp;
   createSmallHeap(a, 0, size - 2 - j);
  }
 }
 private static void createSmallHeap(int[] a, int start, int end) {
  int tmp = a[start];
  int j = 2 * start + 1;
  while (j <= end) {
   if (j < end && a[j] > a[j + 1]) {
    j++;
   }
   if (a[j] < tmp) {
    a[start] = a[j];
    start = j;
    j = 2 * j + 1;
   } else {
    break;
   }
  }
  a[start] = tmp;
 }
// ----------------華-麗-的-功-能-分割-線---------------------
 /**
  * 插入排序
  *
  * @param a sort Array
  * @param sort SortUtil.ASC,SortUtil.DESC
  */
 public static void insertSort(int[] a,int sort){
  if (sort==ASC){
   insertSortAsc(a);
  }else{
   insertSortDesc(a);
  }
 }
 public static void insertSortAsc(int[] a) {
  for (int i = 0; i < a.length - 1; i++) {
   int n = i + 1;
   int tmp = a[n];
   for (int j = i; j >= 0; j--) {
    if (tmp < a[j]) {
     a[n] = a[j];
     n = j;
    }
   }
   if (a[n] != tmp)
    a[n] = tmp;
  }
 }
 public static void insertSortDesc(int[] a) {
  for (int i = 0; i < a.length - 1; i++) {
   int n = i + 1;
   int tmp = a[n];
   for (int j = i; j >= 0; j--) {
    if (tmp > a[j]) {
     a[n] = a[j];
     n = j;
    }
   }
   if (a[n] != tmp)
    a[n] = tmp;
  }
 }
// ----------------華-麗-的-功-能-分割-線--------------------
 /**
  * 折半插入排序
  *
  * @param a sort Array
  * @param sort SortUtil.ASC,SortUtil.DESC
  */
 public static void halfInsertSort(int[] a,int sort){
  if (sort==ASC){
   halfInsertSortAsc(a);
  }else{
   halfInsertSortDesc(a);
  }
 }
 public static void halfInsertSortAsc(int[] a) {
  for (int i = 0; i < a.length - 1; i++) {
   int n = i + 1;
   int tmp = a[n];
   if (tmp > a[i])
    continue;
   int low = 0;
   int high = i;
   int mid = (high + low) / 2;
   while (high >= low) {
    mid = (high + low) / 2;
    if (tmp < a[mid]) {
     high = mid - 1;
    } else if (tmp > a[mid]) {
     low = mid + 1;
    } else {
     low = mid;
     break;
    }
   }
   for (int j = n; j > mid; j--) {
    a[j] = a[j - 1];
   }
   a[low] = tmp;
  }
 }
 public static void halfInsertSortDesc(int[] a) {
  for (int i = 0; i < a.length - 1; i++) {
   int n = i + 1;
   int tmp = a[n];
   if (tmp < a[i])
    continue;
   int low = 0;
   int high = i;
   int mid = (high + low) / 2;
   while (high >= low) {
    mid = (high + low) / 2;
    if (tmp > a[mid]) {
     high = mid - 1;
    } else if (tmp < a[mid]) {
     low = mid + 1;
    } else {
     low = mid;
     break;
    }
   }
   for (int j = n; j > mid; j--) {
    a[j] = a[j - 1];
   }
   a[low] = tmp;
  }
 }
// ----------------華-麗-的-功-能-分割-線----------------------
 /**
  * 希爾排序
  *
  * @param a sort Array
  * @param sort SortUtil.ASC,SortUtil.DESC
  */
 public static void shellSort(int[] a,int sort){
  if (sort==ASC){
   shellSortAsc(a,a.length);
  }else{
   shellSortDesc(a,a.length);
  }
 }
 public static void shellSortAsc(int[] a, int n) {
  int i, j, k, temp, gap;
  int[] gaps = { 1, 5, 13, 43, 113, 297, 815, 1989, 4711, 11969, 27901,
    84801, 213331, 543749, 1355339, 3501671, 8810089, 21521774,
    58548857, 157840433, 410151271, 1131376761, 2147483647 };
  for (k = 0; gaps[k] < n; k++)
   ;
  while (--k >= 0) {
   gap = gaps[k];
   for (i = gap; i < n; i++) {
    temp = a[i];
    j = i;
    while (j >= gap && a[j - gap] > temp) {
     a[j] = a[j - gap];
     j = j - gap;
    }
    a[j] = temp;
   }
  }
 }
 public static void shellSortDesc(int[] a, int n) {
  int i, j, k, temp, gap;
  int[] gaps = { 1, 5, 13, 43, 113, 297, 815, 1989, 4711, 11969, 27901,
    84801, 213331, 543749, 1355339, 3501671, 8810089, 21521774,
    58548857, 157840433, 410151271, 1131376761, 2147483647 };
  for (k = 0; gaps[k] < n; k++)
   ;
  while (--k >= 0) {
   gap = gaps[k];
   for (i = gap; i < n; i++) {
    temp = a[i];
    j = i;
    while (j >= gap && a[j - gap] < temp) {
     a[j] = a[j - gap];
     j = j - gap;
    }
    a[j] = temp;
   }
  }
 }
// ----------------華-麗-的-功-能-分割-線---------------------
 /**
  * 選擇排序
  *
  * @param a sort Array
  * @param sort SortUtil.ASC,SortUtil.DESC
  */
 public static void selectSort(int[] a,int sort){
  if (sort==ASC){
   selectSortAsc(a);
  }else{
   selectSortDesc(a);
  }
 }
 public static void selectSortAsc(int[] a) {
  for (int i = 0; i < a.length - 1; i++) {
   int min = i;
   for (int j = i + 1; j < a.length; j++) {
    if (a[j] < a[min])
     min = j;
   }
   if (min != i) {
    int tmp = a[i];
    a[i] = a[min];
    a[min] = tmp;
   }
  }
 }
 public static void selectSortDesc(int[] a) {
  for (int i = 0; i < a.length - 1; i++) {
   int max = i;
   for (int j = i + 1; j < a.length; j++) {
    if (a[j] > a[max])
     max = j;
   }
   if (max != i) {
    int tmp = a[i];
    a[i] = a[max];
    a[max] = tmp;
   }
  }
 }
// ----------------華-麗-的-功-能-分割-線---------------------
 /**
  * 歸并排序
  *
  * @param a sort Array
  * @param sort SortUtil.ASC,SortUtil.DESC
  */
 public static void mergeSort(int[] a,int sort){
  // 找出中間值
  int mid = a.length / 2;
  // 申請空間存儲中間索引以左的值
  int[] left = setValue(a, 0, mid);
  if (left.length > 1) {// 繼續拆分左邊,直到元素值為1個
   mergeSort(left,sort);
  }
  // 申請空間存儲中間索引以右的值
  int[] right = setValue(a, mid, a.length);
  if (right.length > 1) {// 繼續拆分右邊,直到元素值為1個
   mergeSort(right,sort);
  }
  if (sort==ASC){
   mergeAsc(a, left, right);
  }else{
   mergeDesc(a, left, right);
  }
 }
 private static void mergeAsc(int[] a, int[] left, int[] right) {
  int i = 0, j = 0, k = 0;
  for (; i < left.length && j < right.length;) {
   if (left[i] < right[j]) {
    a[k++] = left[i++];
   } else {
    a[k++] = right[j++];
   }
  }
  for (; i < left.length; i++) {
   a[k++] = left[i];
  }
  for (; j < right.length; j++) {
   a[k++] = right[j];
  }
 }
 private static void mergeDesc(int[] a, int[] left, int[] right) {
  int i = 0, j = 0, k = 0;
  for (; i < left.length && j < right.length;) {
   if (left[i] > right[j]) {
    a[k++] = left[i++];
   } else {
    a[k++] = right[j++];
   }
  }
  for (; i < left.length; i++) {
   a[k++] = left[i];
  }
  for (; j < right.length; j++) {
   a[k++] = right[j];
  }
 }
 private static int[] setValue(int[] a, int start, int length) {
  int[] x = new int[length - start];
  for (int i = 0; i < x.length; i++) {
   x[i] = a[start++];
  }
  return x;
 }
}

希望本文所述對大家Java程序設計有所幫助。

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 夫妻性生活免费在线观看 | 国产精品主播在线 | 好男人好资源在线观看 | 亚洲香蕉伊在人在线观看9 亚洲系列国产系列 | 91入口免费网站大全 | 亚洲精品97福利在线 | 欧美一级h | 好硬好大好浪夹得好紧h | 亚欧成人中文字幕一区 | 午夜国产在线 | 四大美女思春艳史片 | 国内亚州视频在线观看 | 青青青久热国产精品视频 | 美女视频黄a | 九九精品久久 | 精品一区二区三区视频日产 | 91香蕉依人综合久久 | 国产成人亚洲影视在线 | 痴mu动漫成年动漫在线观看 | 三级视频中文字幕 | 亚欧美色| 午夜精品久久久久久久2023 | 韩国三级大全 | 美女脱小内内给男生摸j | 久久久久久久电影 | 国产精品免费视频一区一 | 超碰成人在线播放 | 波多野结衣同性系列698 | 国产精品猎奇系列在线观看 | 国产欧美va欧美va香蕉在线观 | yellow视频免费观看播放 | chinses台湾男同志hd | 欧洲vodafonewi喷潮 | 欧美日韩国产成人综合在线影院 | 欧美激情综合 | 免费一级日本c片完整版 | 好大用力深一点视频 | 国产精品久久久久久吹潮 | 亚洲精品免费观看 | 女人叉开腿让男人桶 | 禁止的爱善良的未删减版hd |