归并排序Java实现
2013-09-02 10:52
197 查看
归并排序的主题思想:
两组有序的数据列表,要合并成一组排好序的数据列表,方法是循环每次分别用两组数据最小的数据进行比较,取较小者,即为当前合并后最小的数据项,最后将其中一个数据列表剩余数据项直接copy到合并后的数据表表尾部。
OK,现在有一组数据,使用归并排序的思想进行排序,对数据不断的进行折半拆分递归,最后拆成最原子粒度级别的数据列表只有一项数据,两个数据列表分别只有一项数据,进行合并排序成一个有两项数据的数据列表,再进行两个数据列表分别只有两项数据进行合并排序,合并成四项。。以此类推!
时间复杂度:
由完全二叉树的深度计算可知,要递归log2N次,每次递归子列表的数据全需要扫描一次,一趟归并需要将待排序序列中的所有记录扫描一遍(实际上是1...n =(1+n)/2) ,时间复杂度为:Nlog2N
两组有序的数据列表,要合并成一组排好序的数据列表,方法是循环每次分别用两组数据最小的数据进行比较,取较小者,即为当前合并后最小的数据项,最后将其中一个数据列表剩余数据项直接copy到合并后的数据表表尾部。
OK,现在有一组数据,使用归并排序的思想进行排序,对数据不断的进行折半拆分递归,最后拆成最原子粒度级别的数据列表只有一项数据,两个数据列表分别只有一项数据,进行合并排序成一个有两项数据的数据列表,再进行两个数据列表分别只有两项数据进行合并排序,合并成四项。。以此类推!
时间复杂度:
由完全二叉树的深度计算可知,要递归log2N次,每次递归子列表的数据全需要扫描一次,一趟归并需要将待排序序列中的所有记录扫描一遍(实际上是1...n =(1+n)/2) ,时间复杂度为:Nlog2N
public class MergeSort { public static void main(String[] args) { int a[]={1,3,0,5,6}; MergeSort ms=new MergeSort(); ms.sort (a,0,4); for (int i=0;i<a.length;i++) System.out.println(a[i]); } public void sort(int a[],int low,int high) { if (low<high) { int mid=(low+high)/2; sort(a,low,mid); sort(a,mid+1,high); mergesort(a,low,high,mid); } } public void mergesort(int a[],int low,int high,int mid) { int c[]=new int [a.length]; int lowtemp=low; int midtemp=mid+1; int tempadr=low; int tmp=low; while (lowtemp<=mid&&midtemp<=high) { if (a[lowtemp]<=a[midtemp]) c[tempadr++]=a[lowtemp++]; else c[tempadr++]=a[midtemp++]; } while (midtemp<=high) c[tempadr++]=a[midtemp++]; while(lowtemp<=mid) c[tempadr++]=a[lowtemp++]; for (int i=low;i<=high;i++) a[i]=c[i]; System.out.println(Arrays.toString(a)); } }
相关文章推荐
- 归并排序 java语言实现
- 希尔排序和归并排序(java实现)
- Shell、归并排序、递归的java实现
- Java实现归并排序(Merge-Sort)算法
- MergeSort(归并排序)算法Java实现
- java实现各种基础排序(冒泡排序、快速排序、直接选择排序、堆排序、直接插入排序、归并排序)
- 归并排序——java实现
- 归并排序及Java实现
- 归并排序(java实现)
- java实现的归并排序(java)
- 【转】排序算法复习(Java实现)(二): 归并排序,堆排序,桶式排序,基数排序
- 归并排序java实现
- Java 归并排序实现
- Java实现常见排序--希尔排序、快排序、堆排序、归并排序等Java实现代码
- 排序算法复习(Java实现)(二): 归并排序,堆排序,桶式排序,基数排序
- 一步步学习数据结构和算法之归并排序效率分析及java实现
- 几种常用的排序算法的分析及java实现(希尔排序,堆排序,归并排序,快速排序,选择排序,插入排序,冒泡排序)
- 归并排序 一个简单的java实现
- Java实现的归并排序
- 程序员必知的8大排序(四)-------归并排序,基数排序(java实现)