您的位置:首页 > 其它

我的“归并算法”实现

2013-04-27 11:01 225 查看
这是我的“归并算法”Java实现!

View Code

/*
* 练习:归并算法
* 功能:对一堆数据进行排序
* 作者:陈沛锐
* 时间:2013.03.25
*/
package part01.chapter02;

import java.util.Random;
import java.util.Scanner;

public class _3exercise {
public static void main(String[] args) {
// int[] A={1,3,5,7,9,10,2,4,6,8,10};
// MERGE myMerge = new MERGE(A, 0, 5, 10);
//create data
System.out.println("Please inter the data counts");
Scanner scanner=new Scanner(System.in);
int leng = scanner.nextInt();
CreateDate createDate = new CreateDate(leng);
int[] A = createDate.create();
//sort data by MERGE_SORT()
MERGE_SORT merge_sort=new MERGE_SORT();
merge_sort.sort(A,0,leng-1);
//output sorted data
System.out.println("the sorted data are follow:");
for(int i=0;i<leng;i++){
System.out.print(A[i]+" ");
}
}

}
//MERGE_SORT
class MERGE_SORT{
public void sort(int[] A, int p, int r) {
MERGE merge = new MERGE();
int q = 0;
if (p < r) {
q = (p + r) / 2;
sort(A, p, q);
sort(A, q+1, r);
merge.sort(A, p, q, r);
}
}
}
// Create date
class CreateDate {
int leng = 0;
Random randomInt = new Random();
CreateDate(int leng) {
this.leng = leng;
}

public int[] create() {
int[] A = new int[leng];
System.out.println("Please inter the max number(<10000):");
Scanner scanner=new Scanner(System.in);
int maxNum = scanner.nextInt();
if(maxNum>10000){
System.out.println("enter error!");
System.exit(0);
}
for (int i = 0; i < leng; i++) {
A[i] = randomInt.nextInt(maxNum);
}
return A;
}
}

// MERGE class for merger data
class MERGE {
int[] L = null;
int[] R = null;

// sort
public void sort(int[] A, int p, int q, int r) {
L = new int[q - p + 2];
R = new int[r - q + 1];
for (int i = 0; i < q - p + 1; i++) {
L[i] = A[p + i];
}
L[q - p + 1] = 10000;// 10000 is max number
for (int j = 0; j < r - q; j++) {
R[j] = A[q + 1 + j];
}
R[r - q] = 10000;// 10000 is max number
// test output A[p..r]
// for(int i=p;i<r+1;i++){
// System.out.print(A[i]+" ");
// }
int j = 0;
int k = 0;
for (int i = 0; i < r - p + 1; i++) {
if (L[j] <= R[k]) {
A[p + i] = L[j];
j++;
} else {
A[p + i] = R[k];
k++;
}
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: