现在的位置: 首页 > 综合 > 正文

归并排序算法

2014年03月20日 ⁄ 综合 ⁄ 共 1476字 ⁄ 字号 评论关闭

这个学期学习算法,大一学过C,现在忘了好多,写起来很别扭,所以用java实现,首先上归并排序。

import java.util.Scanner;

/**
 * @author 段星星
 * 归并排序算法
 *
 */
public class MergeSort {

 /**
* @param a 从键盘输入int数字,存入
* @param left 数组中待排序的部分的最左下标
* @param right 数组中待排序的部分的最右下标
*/
public static void mergeSort(int[] a ,int left , int right){
 
if(left<right){
 
int i = (left+right)/2;
mergeSort(a, left, i);
mergeSort(a, i+1, right);
int[] b = new int[a.length];
merge(a,b,left,i,right);
copy(a,b,left,right);
}
}

/**
* @param a 待排序的数组
* @param b 临时数组
* @param left 数组中待排序的部分的最左下标
* @param right 数组中待排序的部分的最右下标
*/
private static void copy(int[] a, int[] b, int left, int right) {

for(int i=0; i<b.length;i++){
a[i]=b[i];
}

}


/**
* 合并两个已排序的子数组,按从小到大方式
*/
private static void merge(int[] a, int[] b, int l, int m, int r) {


int i = l, j = m+1,k=0;
//从低位到高位依次比较两个数组,取出较小值放入b中
while((i<=m)&&(j<=r)){
if(a[i]<a[j]) b[k++] = a[i++];
else b[k++] = a[j++];
}
//当有一方数组取完时
if(i>m){ for(int q=j; q<=r; q++) 
b[k++] = a[q++];}
 
else {
for(int q=i; q<=m; q++) 
b[k++] = a[q++];

}
//把临时数组的未赋值部分用a数组赋值,以免不赋值部分等于0,等到赋值给a时丢失数据
for(int t=k;t<a.length;t++){

b[t]=a[t];
}
}


public static void main(String[] args) { 

//从键盘读入数据
Scanner sc = new Scanner(System.in);

int[] a = new int[3];
int i =0;

System.out.println("请输入要排序的int整数!");

while(sc.hasNext()){
a[i] = sc.nextInt();
i++;
if(i>=3)
break;
}
sc.close();
/*for(int j=0; j<a.length; j++){
System.out.println(a[j]);
}*/
MergeSort.mergeSort(a, 0, 2);
/*for(int aValue : a){
System.out.println(aValue);
}*/
for(int j=0; j<a.length; j++){
System.out.println(a[j]);
}


}


}






更多


抱歉!评论已关闭.