国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

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

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

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 亚洲网站在线观看 | 亚洲伊人久久综合 | 国产精品久久久久久久午夜 | 九色精品 | 不用播放器看av | 国产中文一区 | 亚洲国产精品99久久久久久久久 | 欧美精品一区二区三区在线 | 九色在线视频 | 日韩中文一区二区三区 | 成人精品视频免费在线观看 | 国产99久久久精品视频 | 日韩中文视频 | 国产精品三区在线 | 亚洲免费人成在线视频观看 | 337p日本粉嫩噜噜噜 | 国产三级网站 | 在线中文 | 国产精品亚洲第一区在线暖暖韩国 | 国产亚洲精品久久久久久久久 | 国产精品成人3p一区二区三区 | 成人精品视频免费 | a级片在线观看 | 大胆一区| 国产在线视频xxx | 欧美视频一区二区 | 宅男lu666噜噜噜在线观看 | 青青久视频 | 亚洲精品成人 | 欧美区亚洲区 | 成人做爰69片免费 | 午夜大片男女免费观看爽爽爽尤物 | 亚洲精品网址 | 欧美一级高清免费 | 国产小视频在线 | 一区二区中文字幕 | 国产xxxx成人精品免费视频频 | 精品国产精品三级精品av网址 | 精品中文字幕一区 | 处女一级片 | 欧美日韩福利 |