java实现归并排序算法
源代码
public class MergeSort extends DataCrol {
void merge(int A[], int left, int mid, int right) {
int len = right - left + 1 ;
int [] temp = new int [len];
int index = 0 ;
int i = left;
int j = mid + 1 ;
while (i <= mid && j <= right) {
temp[index++] = A[i] <= A[j] ? A[i++] : A[j++];
}
while (i <= mid) {
temp[index++] = A[i++];
}
while (j <= right) {
temp[index++] = A[j++];
}
for (int k = 0 ; k < len; k++) {
A[left++] = temp[k];
}
}
void mergeSortRecursion(int A[], int left, int right) {
if (left == right)
return ;
int mid = (left + right) / 2 ;
mergeSortRecursion(A, left, mid);
mergeSortRecursion(A, mid + 1 , right);
merge(A, left, mid, right);
}
void mergeSortIteration(int A[]) {
int len = A.length;
int left, mid, right;
for (int i = 1 ; i < len; i *= 2 ) {
left = 0 ;
while (left + i < len) {
mid = left + i - 1 ;
right = mid + i < len ? mid + i : len - 1 ;
merge(A, left, mid, right);
left = right + 1 ;
}
}
}
@Override
public void sort (int [] array) {
mergeSortRecursion(array, 0 , array.length - 1 );
}
public static void main (String[] args) {
MergeSort mergeSort = new MergeSort();
int [] array = DataCrol.createRandomArray(20 );
DataCrol.print(array);
mergeSort.sort(array);
DataCrol.print(array);
mergeSort.timeTest(10000000 );
}
}