Java归并排序怎么实现
发表于:2025-02-05 作者:千家信息网编辑
千家信息网最后更新 2025年02月05日,本篇内容介绍了"Java归并排序怎么实现"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!归并排序是建立
千家信息网最后更新 2025年02月05日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安全错误
数据库的锁怎样保障安全
sts软件开发工具
商业信息网络技术
嵌入式软件开发哪家专业
金蝶数据库字典
操作数据库的语言叫什么
网络安全舆情管理
国源数据库重复编码
寝室网络安全管理
sql中按时间段查询数据库
汽车技术和信息网络安全
河南软件开发系统定制
数据库技术有什么前景
黄浦区无线网络技术特价
网络安全生产工作报告
并发量1万人的服务器多少钱
凉山软件开发技巧
JAVA数据库连接是短连接
信息网络技术与旅游
数据库系统原理作业二
软件开发类项目自检报告书
网上网络安全宣传周
黄浦区智能网络技术设备
网络安全产品经理怎么样
管理服务器密码复杂度
看新闻挣钱软件开发
公积金网络安全的保护措施
北京运维管理软件开发价位
软件开发要学多少
三菱服务器AL74警报
嘉兴数字视频系统服务器