Java实现归并排序
2012-09-10 18:54
435 查看
简述:
java实现归并排序
知识点:
1. 归并排序算法
2. Compare 接口实现
3. Java随机数
代码:
Comapre接口,
CompareTwoObject.java
归并排序,及测试函数,
MergeSortAlgorithm.java
输出:
java实现归并排序
知识点:
1. 归并排序算法
2. Compare 接口实现
3. Java随机数
代码:
Comapre接口,
CompareTwoObject.java
package sort.algorithm; public interface CompareTwoObject { boolean Compare(Object a, Object b); }
归并排序,及测试函数,
MergeSortAlgorithm.java
package sort.algorithm; import java.util.ArrayList; import java.util.List; import java.util.Random; public class MergeSortAlgorithm { //匿名内部类 //使用Strategy模式 , 根据Object的不同决定不同的比较方法 CompareTwoObject compareTwoObject = new CompareTwoObject(){ @Override public boolean Compare(Object a, Object b) { if(a instanceof Integer && b instanceof Integer){ Integer x = (Integer)a; Integer y = (Integer)b; if(x > y) return true; } return false; } }; private List<Integer> list = new ArrayList<Integer>(); public MergeSortAlgorithm(List<Integer> list){ this.list = list; } private void Swap(int pos1, int pos2){ Integer temp = list.get(pos2); list.set(pos2, list.get(pos1)); list.set(pos1, temp); } private void MergeSort(int start, int end){ //only two object compared if(end - start == 1){ if(compareTwoObject.Compare(list.get(start), list.get(end))){ Swap(start, end); } }else if(start != end){ int middle = (start + end) / 2; MergeSort(start, middle - 1); MergeSort(middle, end); Merge(start, end); } } private void Merge(int start, int end){ int middle = (start + end) / 2; int index1 = start; int index2 = middle; Integer[] tempArray = new Integer[end - start + 1]; int index = 0; while(index1 < middle && index2 <= end){ if(compareTwoObject.Compare(list.get(index1), list.get(index2))){ tempArray[index++] = list.get(index2++); }else{ tempArray[index++] = list.get(index1++); } } //collect the remaining elements to tempArray if(index1 != middle){ for(int i = index1; i < middle; i++){ tempArray[index++] = list.get(i); } }else{ for(int i = index2; i <= end; i++){ tempArray[index++] = list.get(i); } } //copy from tempArray to list[start,end] for(int i = 0; i < end - start + 1; i++){ list.set(start + i, tempArray[i]); } } public List<Integer> getSortedList(){ MergeSort(0, list.size() - 1); return list; } public static void main(String[] args){ List<Integer> list = new ArrayList<Integer>(); //produce raw data to a list System.out.println("Raw Input: "); for(int i = 0;i < 10;i++){ Random random = new Random(); Integer x = random.nextInt(100); System.out.print(x + " "); list.add(x); } //intialize MergeSortAlgorithm class MergeSortAlgorithm mergeSortAlgorithm = new MergeSortAlgorithm(list); System.out.println("\nSorted Integer List Output: "); for(Integer i : mergeSortAlgorithm.getSortedList()) System.out.print(i + ", "); } }
输出:
相关文章推荐
- 归并排序的Java实现
- java实现根号n路归并排序
- 排序算法--归并排序Java实现 .
- java中各种常用排序实现(直接插入排序、直接选择排序、堆排序、冒泡排序、快速排序和归并排序)
- 排序算法(Java实现):Shell排序和归并排序
- -------归并排序,基数排序(java实现)
- 归并排序(Mergesort)之Java实现
- 归并排序--JAVA代码实现
- 排序算法(五):JAVA实现归并排序
- 归并排序-java实现
- 算法-java代码实现归并排序
- 归并排序的java实现
- java实现的归并排序详解
- 【转】排序算法复习(Java实现) (二): 归并排序,堆排序,桶式排序,基数排序
- 归并排序 java语言实现
- java实现归并排序
- java实现的归并排序
- 排序算法(二)_希尔排序、快速排序、归并排序的Java实现
- 归并排序-java实现
- 程序员必知的8大排序(四)-------归并排序,基数排序(java实现)