归并排序Java实现
package com.mike.sort;
import java.util.Arrays;
public class MergeSort {
/*
* 归并排序
*/
public static void mergeSort(DataWrap[] data){
sort(data,0,data.length-1);
}
public static void sort(DataWrap[] data,int left,int right){
if (left<right) {
int center=(left+right)/2;
sort(data, left, center);
sort(data, center+1, right);
merge(data,left,center,right);
}
}
public static void merge(DataWrap[] data,int left,int center,int right) {
DataWrap[] tempArr=new DataWrap[data.length];
int mid=center+1;
int third=left;
int temp=left;
while(left<=center && mid<=right){
if (data[left].compareTo(data[mid])<0) {
tempArr[third++]=data[left++];
}else {
tempArr[third++]=data[mid++];
}
}
while(left<=center){
tempArr[third++]=data[left++];
}
while(mid<=right){
tempArr[third++]=data[mid++];
}
while(temp<=right){
data[temp]=tempArr[temp++];
}
}
/*
* 交换数组元素
*/
public static void swap(DataWrap[] data,int i,int j){
DataWrap temp=data[i];
data[i]=data[j];
data[j]=temp;
}
public static void main(String[] args) {
DataWrap[] dataWraps={
new DataWrap(21,""),
new DataWrap(31,""),
new DataWrap(-2,""),
new DataWrap(38,"*"),
new DataWrap(22,""),
new DataWrap(2,""),
new DataWrap(-5,""),
new DataWrap(13,""),
new DataWrap(20,"")
};
System.out.println("排序之前:"+Arrays.toString(dataWraps));
mergeSort(dataWraps);
System.out.println("排序之后:"+Arrays.toString(dataWraps));
}
}
/*
*定义一个数据包装类
*/
class DataWrap implements Comparable<DataWrap>{
int data;
String flag;
public DataWrap() {
// TODO Auto-generated constructor stub
}
public DataWrap(int data,String flag) {
this.data=data;
this.flag=flag;
}
@Override
public String toString(){
return data+flag;
}
@Override
public int compareTo(DataWrap o) {
// TODO Auto-generated method stub
return this.data>o.data?1:(this.data==o.data?0:-1);
}
}