Java归并排序怎么实现
发表于:2024-11-24 作者:千家信息网编辑
千家信息网最后更新 2024年11月24日,本篇内容介绍了"Java归并排序怎么实现"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!归并排序是建立
千家信息网最后更新 2024年11月24日Java归并排序怎么实现
本篇内容介绍了"Java归并排序怎么实现"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!
归并排序是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。NlogN 由于需要两两比较 因此也是稳定的!
首先考虑下如何将将二个有序数列合并。这个非常简单,只要从比较二个数列的第一个数,谁小就先取谁,取了后就在对应数列中删除这个数。然后再进行比较,如果有数列为空,那直接将另一个数列的数据依次取出即可。
//将有序数组a[]和b[]合并到c[]中 void MemeryArray(int a[], int n, int b[], int m, int c[]) { int i, j, k; i = j = k = 0; while (i < n && j < m) { if (a[i] < b[j]) c[k++] = a[i++]; else c[k++] = b[j++]; } while (i < n) c[k++] = a[i++]; while (j < m) c[k++] = b[j++]; }
可以看出合并有序数列的效率是比较高的,可以达到O(n)。
解决了上面的合并有序数列问题,再来看归并排序,其的基本思路就是将数组分成二组A,B,如果这二组组内的数据都是有序的,那么就可以很方便的将这二组数据进行排序。如何让这二组组内数据有序了?
可以将A,B组各自再分成二组。依次类推,当分出来的小组只有一个数据时,可以认为这个小组组内已经达到了有序,然后再合并相邻的二个小组就可以了。这样通过先递归的分解数列,再合并数列就完成了归并排序。
归并排序的效率是比较高的,设数列长为N,将数列分开成小数列一共要logN步,每步都是一个合并有序数列的过程,时间复杂度可以记为O(N),故一共为O(N*logN)。因为归并排序每次都是在相邻的数据中进行操作,所以归并排序在O(N*logN)的几种排序方法(快速排序,归并排序,希尔排序,堆排序)也是效率比较高的。
#include#include //将二个有序数列a[first...mid]和a[mid+1...last]合并。void MerageArr(int a[], int first, int mid, int last, int temp[]){ int i = first, j = mid + 1; int k = 0; while (i <= mid && j <= last) { if (a[i] <= a[j]) { temp[k++] = a[i++]; } else { temp[k++] = a[j++]; } } while (i <= mid) { temp[k++] = a[i++]; } while (j <= last) { temp[k++] = a[j++]; } for (i = 0; i < k; i++) { a[first + i] = temp[i]; }}void MSort(int a[], int first, int last, int temp[]){ if (first < last) { int mid = (first + last) / 2; MSort(a, first, mid, temp); //左边有序 MSort(a, mid + 1, last, temp); //右边有序 MerageArr(a, first, mid, last, temp); //再将二个有序数列合并 }}bool MergeSort(int a[], int n){ int *temp = new int[n]; assert(temp!=NULL); MSort(a, 0, n - 1, temp); delete [] temp; return true;}int main(){ int a[] = {5,4,3,2,1}; MergeSort(a,5); for(int i=0;i<5;i++) { cout< 用递归无非就是将一个大数组一半一半的分 然后再逆序 组合起来! 我们可以直接从最底层的一个一个的组合来组正一个大数组#includeusing namespace std;void merageArr(int a[],int first, int mid, int last,int tempArr[]){ int i=first; int j=mid+1; int k=0; while(i<=mid && j<=last) { if(a[i]n-1) { high=n-1; } merageArr(a,low,mid,high,tempArr); low=high+1; } } delete []tempArr;}int main(){ int a[5]={5,4,3,2,1}; MerageSort(a, 5); for(int i=0;i<5;i++) cout< "Java归并排序怎么实现"的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注网站,小编将为大家输出更多高质量的实用文章!
排序
数列
有序
数据
j++
数组
效率
个数
内容
小组
就是
更多
知识
算法
过程
递归
组合
复杂
实用
有效
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
扬州软件开发培训班
刚开始玩传奇什么服务器适合
如何为数据库批量添加数据
安庆医疗软件开发定制公司
软件开发应知应会课程考试
科技部网络安全组
昭通市昭阳区易记软件开发
数据库主文件组怎么看
软件开发用联想小新可以吗
海南广东网络安全培训哪里学
武汉大学生网络安全论坛
怎么在服务器上玩腾讯游戏
数据库管理员基础函数
服务器uid灯
软件开发技术经理与项目经理
网页中如何选择服务器
shopex的数据库
康乐服务器
杭州交易软件开发
新吴区先进网络技术代理价格
简单数据库实例db
数据库热备用和冷备用怎么区别
智能科技 互联网企业
珠海仓库管理软件开发
超级互联网科技帝国
文件服务器加群晖
连接远程数据库 外网
朔州软件开发价格走势
杭州交易软件开发
浙江互联网科技大厦