归并排序
public class MergeSort {
public static void mergeSort(int[] arr
, int l
, int r
) {
if (arr
== null
|| arr
.length
< 2 || l
== r
) {
return;
}
int mid
= l
+ ((r
- l
) >> 2);
mergeSort(arr
, l
, mid
);
mergeSort(arr
, mid
+ 1, r
);
merge(arr
, l
, mid
, r
);
}
public static void merge(int[] arr
, int l
, int mid
, int r
) {
int[] help
= new int[r
- l
+ 1];
int i
= 0;
int p1
= l
;
int p2
= mid
+ 1;
while (p1
<= mid
&& p2
<= r
) {
help
[i
++] = arr
[p1
] < arr
[p2
] ? arr
[p1
++] : arr
[p2
++];
}
while (p1
<= mid
) {
help
[i
++] = arr
[p1
++];
}
while (p2
<= r
) {
help
[i
++] = arr
[p2
++];
}
for (i
= 0; i
< help
.length
; i
++) {
arr
[l
+ i
] = help
[i
];
}
}
public static void main(String
[] args
) {
int[] arr
= { 9, 3, 1, 1, 8, 5, 5, 6, 0 };
mergeSort(arr
, 0, arr
.length
- 1);
for (int i
= 0; i
< arr
.length
; i
++) {
System
.out
.println(arr
[i
]);
}
}
}
转载请注明原文地址: https://mac.8miu.com/read-503438.html