- 关 键 词:
- java
精华网络内容 :http://www.qqread.com/network/
package Utils.Sort;
/**
*归并排序,要求待排序的数组必须实现Comparable接口
*/
public class MergeSort implements SortStrategy
{ private Comparable[] bridge;
/**
*利用归并排序算法对数组obj进行排序
*/
public void sort(Comparable[] obj)
{ if (obj == null)
{ throw new NullPointerException("The param can not be null!");
}
bridge = new Comparable[obj.length]; //初始化中间数组mergeSort(obj, 0, obj.length - 1); //归并排序
bridge = null;
}
/***将下标从left到right的数组进行归并排序
*@param obj 要排序的数组的句柄
*@param left 要排序的数组的第一个元素下标
*@param right 要排序的数组的最后一个元素的下标
*/
private void mergeSort(Comparable[] obj, int left, int right)
{ if (left < right)
{ int center = (left + right)/2;
mergeSort(obj, left, center);
mergeSort(obj, center + 1, right);
merge(obj, left, center, right);
}
}
/**
*将两个对象数组进行归并,并使归并后为升序。归并前两个数组分别有序
*@param obj 对象数组的句柄
*@param left 左数组的第一个元素的下标
*@param center 左数组的最后一个元素的下标
*@param right 右数组的最后一个元素的下标
*/
private void merge(Comparable[] obj, int left, int center, int right)
{ int mid = center + 1;
int third = left;
int tmp = left;
while (left <= center && mid <= right)
{ //从两个数组中取出小的放入中间数组
if (obj[left].compareTo(obj[mid]) <= 0)
{ bridge[third++] = obj[left++];
} else
bridge[third++] = obj[mid++];
}
//剩余部分依次置入中间数组while (mid <= right)
{ bridge[third++] = obj[mid++];
}
while (left <= center){ bridge[third++] = obj[left++];
}
//将中间数组的内容拷贝回原数组copy(obj, tmp, right);
}
/***将中间数组bridge中的内容拷贝到原数组中
*@param obj 原数组的句柄
*@param left 要拷贝的第一个元素的下标
*@param right 要拷贝的最后一个元素的下标
*/
private void copy(Comparable[] obj, int left, int right)
{ while (left <= right)
{ obj[left] = bridge[left];
left++;
} }
}
相关专题
- Java环境安装配置 (5669篇文章)
- Java编程开发手册 (8322篇文章)
- JAVA算法 (56篇文章)
- 精通Hibernate之映射继承关系(四) (0次浏览)
- 何不将Java与.NET合二为一? (0次浏览)
- Hibernate的JNDI名称绑定分析 (0次浏览)
- 精通Hibernate之映射继承关系(一) (0次浏览)
- 精通Hibernate之映射继承关系(二) (0次浏览)
- 美国计算机教授语出惊人:Java对学生有害 (0次浏览)
- JDK 6 JRE 6 Update 4 (0次浏览)
- 三步教你改善Java代码质量 (0次浏览)
- Java语言入门 简述Java语言回收机制 (0次浏览)
- 2008年Java开发者最迫切的五个期望 (0次浏览)



