Java归并排序怎么实现
发表于:2025-12-04 作者:千家信息网编辑
千家信息网最后更新 2025年12月04日,本篇内容介绍了"Java归并排序怎么实现"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!归并排序是建立
千家信息网最后更新 2025年12月04日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安全错误
数据库的锁怎样保障安全
网络技术基础与计算思维论文
企业级历史实时数据库
手机应用商店服务器异常怎么回事
网络安全软件的论文
主机屋服务器管理
ug服务器安装不上
丰南区辅助网络技术答疑解惑
湖南安卓软件开发商
新洲靠谱的软件开发中心
服务器无线网卡驱动装不上
服务器路线代表什么
商品评论文本数据库
数据库创建学生表添加信息
服务器自带的网络怎么连接
网络安全和审核工具
潍坊智慧社区软件开发系统
华为i服务器配置管理ip
疫情对软件开发
阿里巴巴网络安全风险
调整数据库表的字段长度
我的世界地铁模式服务器号
学校网络安全信息学画画
通信网络安全管理员报名费
佛山汽车软件开发联系方式
恒生互联网科技业指数编制规则
北京网络安全行业发展
数据库的三大基本原则
软件开发技术广告
防范网络安全的内容文字
amoc服务器