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

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

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程序設計有所幫助。

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 国产大胆歌舞团网站 | 97国产自拍 | 邪恶肉肉全彩色无遮琉璃神社 | 日本欧美强乱视频在线 | 欧美日韩国产亚洲人成 | 亚洲AV精品无码喷水直播间 | 特黄特黄一级片 | 九九大香尹人视频免费 | 国产精品免费视频一区一 | 国产成+人+综合+欧美 亚洲 | 4hc44四虎永久地址链接 | 99热精品在线免费观看 | 呜呜别塞了啊抽插 | 99视频九九精品视频在线观看 | 2019男人天堂 | 图片专区亚洲欧美另类 | 色老汉 | 国产性视频 | 男生操女生漫画 | 热99精品在线 | 网站视频免费 | 亚洲99久久无色码中文字幕 | 色综合合久久天天综合绕视看 | 男人猛戳女人下部30分钟 | 国产在线视频自拍 | a v在线男人的天堂观看免费 | 亚洲AVAV天堂AV在线网爱情 | 青青青国产精品国产精品久久久久 | 四虎在线最新永久免费 | 色综合中文字幕天天在线 | 亚洲精品AV无码永久无码 | 久久久免费观看 | 大奶喷水 | 99久久九九 | 免费网站看v片在线香蕉 | 香港日本三级亚洲三级 | 国产婷婷综合丁香亚洲欧洲 | 亚洲国产成人精品无码区APP | 极品美女a∨片在线看 | bt天堂午夜国产精品 | 国内精品久久久久久久久久久久 |