- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章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程序设计有所帮助.
最后此篇关于Java各种排序算法汇总(冒泡,选择,归并,希尔及堆排序等)的文章就讲到这里了,如果你想了解更多关于Java各种排序算法汇总(冒泡,选择,归并,希尔及堆排序等)的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
我正在尝试对每个条目有多个值的关联数组进行排序。 例如 [0] => stdClass Object ( [type] => node [sid] => 158 [score] => 0.059600
我在 mysql 中有“日期”列以这种格式保存日期 2014 年 9 月 17 日(日-月-年) 我需要对它们进行升序排序,所以我使用了这个命令: SELECT * FROM table ORDER
我目前正在将 MySQL 存储过程重写为 MS SQL 存储过程,但遇到了问题。 在 MySQL 存储过程中,有一个游标,它根据最近的日期 (effdate) 选择一个值并将其放入变量 (thestt
我想要 gwt r.QuestionId- 排序。但是我得到未排序的 QuestionId 尽管我提到了 QuestionId ASC 的顺序。 SELECT r.QuestionId,
我有一个关于在 scandir 函数中排序的基本问题。到目前为止,我阅读了 POSIX readdir 的手册页,但没有找到有关订购保证的具体信息。 但是当我遍历大目录(无法更改,只读)时,我在多个系
基本上我必须从 SQL 数据库中构建项目列表,但是用户可以选择对 7 个过滤器的任意组合进行过滤,也可以选择要排序的列以及按方向排序。 正如您可以想象的那样,这会以大量不同的组合进行编码,并且数据集非
我有两张 table 。想象第一个是一个目录,包含很多文件(第二个表)。 第二个表(文件)包含修改日期。 现在,我想选择所有目录并按修改日期 ASC 对它们进行排序(因此,最新的修改最上面)。我不想显
我想先根据用户的状态然后根据用户名来排序我的 sql 请求。该状态由 user_type 列设置: 1=活跃,2=不活跃,3=创始人。 我会使用此请求来执行此操作,但它不起作用,因为我想在“活跃”成员
在 C++ 中,我必须实现一个“类似 Excel/Access”(引用)的查询生成器,以允许对数据集进行自定义排序。如果您在 Excel 中使用查询构建器或 SQL 中的“ORDER BY a, b,
我面临这样的挑战: 检索按字段 A 排序的文档 如果字段 B 存在/不为空 . 否则 按字段排序 C. 在 SQL 世界中,我会做两个查询并创建一个 UNION SELECT,但我不知道如何从 Mon
我想对源列表执行以下操作: map 列表 排序 折叠 排序 展开 列表 其中一些方法(例如map和toList)是可链接的,因为它们返回非空对象。但是,sort 方法返回 void,因为它对 List
我制作了一个用于分析 Windows 日志消息编号的脚本。 uniq -c 数字的输出很难预测,因为根据数字的大小会有不同的空白。此时,我手动删除了空白。 这是对消息进行排序和计数的命令: cat n
我有以下词典: mydict1 = {1: 11, 2: 4, 5: 1, 6: 1} mydict2 = {1: 1, 5: 1} 对于它们中的每一个,我想首先按值(降序)排序,然后按键(升序)排序
我刚刚开始使用泛型,目前在对多个字段进行排序时遇到问题。 案例: 我有一个 PeopleList 作为 TObjectList我希望能够通过一次选择一个排序字段,但尽可能保留以前的排序来制作类似 Ex
有没有办法在 sql 中组合 ORDER BY 和 IS NULL 以便我可以在列不为空时按列排序,但如果它为null,按另一列排序? 最佳答案 类似于: ORDER BY CASE WHEN
我有一个包含 2 列“id”和“name”的表。 id 是常规的自动增量索引,name 只是 varchar。 id name 1 john 2 mary 3 pop 4 mary 5 j
场景 网站页面有一个带有分页、过滤、排序功能的表格 View 。 表中的数据是从REST API服务器获取的,数据包含数百万条记录。 数据库 REST API 服务器 Web 服务器 浏览器 问
假设我有一本字典,其中的键(单词)和值(分数)如下: GOD 8 DONG 16 DOG 8 XI 21 我想创建一个字典键(单词)的 NSArray,首先按分数排序,然后按字
如何在 sphinx 上通过 sql 命令选择前 20 行按标题 WEIGHT 排序,接下来 20 行按标题 ASC 排序(总共 40 个结果),但不要给出重复的标题输出。 我尝试了这个 sql 命令
我有一个奇怪的问题,当从 SQLite 数据库中选择信息并根据日期排序时,返回的结果无效。 我的SQL语句是这样的: Select pk from usersDates order by dateti
我是一名优秀的程序员,十分优秀!