Skip to content

Instantly share code, notes, and snippets.

@kaka2008
Last active August 29, 2015 14:04
Show Gist options
  • Save kaka2008/b93285dda5145a556073 to your computer and use it in GitHub Desktop.
Save kaka2008/b93285dda5145a556073 to your computer and use it in GitHub Desktop.
用java实现的合并排序
package first;
/**
* 合并排序,时间代价为O(n),总的计算次数是一定的,每次比较花得时间是个常量<br/>
* 但是前提是左右两个数组是排好序的
*
* @author weizhankui
* @date 2014-7-27
*
*/
public class Sort {
/*
* 合并排序(降序)
*
* a是数组 p,q,r是下标,企业满足p<=q<r 假设a[p..q]和a[q+1..r]都是排好序的
*/
public static void merge_desc(int[] a, int p, int q, int r) {
int n1 = q - p + 1;
int n2 = r - q;
int[] left = new int[n1];
int[] right = new int[n2];
for (int i = 0; i < n1; i++) {
left[i] = a[p + i];
}
for (int j = 0; j < n2; j++) {
right[j] = a[q + j + 1];
}
int i = 0;
int j = 0;
for (int k = p; k <= r; k++) {
if (i == n1) {
a[k] = right[j];
j++;
} else if (j == n2) {
a[k] = left[i];
i++;
} else {
if (left[i] >= right[j]) {
a[k] = left[i];
i++;
} else {
a[k] = right[j];
j++;
}
}
}
printArray(a);
}
/*
* 合并排序(升序)
*
* a是数组 p,q,r是下标,企业满足p<=q<r 假设a[p..q]和a[q+1..r]都是排好序的
*/
public static void merge_asc(int[] a, int p, int q, int r) {
int n1 = q - p + 1;
int n2 = r - q;
int[] left = new int[n1];
int[] right = new int[n2];
for (int i = 0; i < n1; i++) {
left[i] = a[p + i];
}
for (int j = 0; j < n2; j++) {
right[j] = a[q + j + 1];
}
int i = 0;
int j = 0;
for (int k = p; k <= r; k++) {
if (i == n1) {
a[k] = right[j];
j++;
} else if (j == n2) {
a[k] = left[i];
i++;
} else {
if (left[i] <= right[j]) {
a[k] = left[i];
i++;
} else {
a[k] = right[j];
j++;
}
}
}
printArray(a);
}
public static void main(String[] args) {
int[] a = { 9, 5, 1, 8, 7, 6, 4, 3, 2 };
System.out.println("降序排列前:");
printArray(a);
System.out.println("降序排列后:");
merge_desc(a, 0, 2, 8);
a = new int[] { 1, 5, 6, 9, 2, 3, 4, 6, 7, 8 };
System.out.println("升序排列前:");
printArray(a);
System.out.println("升序排列后:");
merge_asc(a, 0, 3, 8);
}
public static void printArray(int[] a) {
for (int num : a) {
System.out.print(num + ",");
}
System.out.println("");
}
}
@kaka2008
Copy link
Author

为什么看不到代码样式?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment