MergeSort
来源:互联网 发布:网络安全措施 编辑:程序博客网 时间:2024/06/05 07:15
class Merge{ private static int[] aux;//定义一个数组用于存储归并时存储原数组 public static void sort(int[] a) { aux = new int[a.length];//将数组aux的长度定义为与原数组的长度是一样的 sort(a ,0, a.length-1);//将原数组进行划分 } public static void sort(int[] a,int low,int high) { if (high<=low)//如果子数组中长度为1,此时就不再进行sort了 { return; } int mid =low+ (high-low)/2;//定义一个中位数 sort(a ,low,mid);//将a数组中的元素的前一半尽心再次sort sort(a ,mid+1,high);//将数组的后一半进行sort merge(a,low,mid,high);//将数组的前一半和后一半进行一个merge } public static void merge(int[] a,int low,int mid,int high) { int leftIndex = low;//定义前一半数组元素的Index int rightIndex = mid+1;//定义后一半元素的Index int tempIndex =low;//定义当前子数组的起始位置元素的Index for (int i =low;i<=high ;i++ )//将元素组a的元素复制到数组啊aux中 { aux[i] = a[i]; } while ((leftIndex<=mid)&&(rightIndex<=high))//实现归并 { if (aux[leftIndex]<aux[rightIndex]) { a[tempIndex] = aux[leftIndex]; leftIndex++; } else { a[tempIndex] = aux[rightIndex]; rightIndex++; } tempIndex++; } if (leftIndex>mid) { for (;rightIndex<=high;rightIndex++,tempIndex++) { a[tempIndex] = aux[rightIndex]; } } else { for (;leftIndex<=mid;leftIndex++,tempIndex++ ) { a[tempIndex] = aux[leftIndex]; } } } public static void printArr(int[] a)//输出数组 { for (int i=0;i<a.length ;i++ ) { if (i==0) { System.out.print("{"+a[i]+","); } else if (i<a.length-1) { System.out.print(a[i]+","); } else System.out.println(a[i]+"}"); } }}class MergeSort{ public static void main(String[] args) { int[] a = new int[]{3,44,38,5,47,15,36,26,27,2,46,4,19,50,48}; int[] aux = new int[a.length]; Merge.sort(a); Merge.printArr(a); }}
阅读全文
0 0
- MergeSort
- mergesort
- MergeSort
- mergesort
- mergesort
- Mergesort
- mergesort
- mergeSort
- mergeSort
- mergesort
- MergeSort
- MergeSort
- MergeSort
- MergeSort
- Mergesort
- Mergesort
- mergeSort
- mergesort
- 通过搜狗的公众号搜索爬微信公众号文章
- 不爽 吐槽一下
- 动态代理学习笔记
- 算法设计与分析
- Java练习
- MergeSort
- poj 1416 “特别锁链”
- DFS:101. Symmetric Tree
- 阿里校招应届生面试经验
- ehcache 3.3.0 学习笔记
- 背景建模和前景提取 (2017研究生数模竞赛D题)
- MSAA获取QQ聊天界面群聊按钮位置
- 3.关键色
- 详解java修饰符synchronized