Java归并排序方法怎么使用
发表于:2025-12-02 作者:千家信息网编辑
千家信息网最后更新 2025年12月02日,这篇文章主要介绍"Java归并排序方法怎么使用",在日常操作中,相信很多人在Java归并排序方法怎么使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"Java归并排序方
千家信息网最后更新 2025年12月02日Java归并排序方法怎么使用
这篇文章主要介绍"Java归并排序方法怎么使用",在日常操作中,相信很多人在Java归并排序方法怎么使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"Java归并排序方法怎么使用"的疑惑有所帮助!接下来,请跟着小编一起来学习吧!
题目 用归并排序法对一组数据由小到大进行排序,数据分别为695、458、362、789、12、15、163、23、2、986。
1、程序分析
归并过程为:比较a[i]和a[j]的大小,若a[i]≤a[j],则将第一个有序表中的元素a[i]复制到r[k]中,并令i和k分别加上1;否则将第二个有序表中的元素a[j]复制到r[k]中,并令j和k分别加上1,如此循环下去,直到其中一个有序表取完,然后再将另一个有序表中剩余的元素复制到r中从下标k到下标t的单元。归并排序的算法我们通常用递归实现,先把待排序区间[s,t]以中点二分,接着把左边子区间排序,再把右边子区间排序,最后把左区间和右区间用一次归并操作合并成有序的区间[s,t]。
归并是将两个或多个有序记录序列合并成一个有序序列。归并方法有很多种,一次对两个有序记录进行归并,称为二路归并排序,也有三路归并排序及多路归并排序。本例程采用二路归并排序,基本方法如下:
a、将n个记录看成n个长度为1的有序子表。
b、将两两相邻的有序子表进行归并。
c、重复执行b,直到归并成一个长度为n的有序表。
2、程序实现
/****************************************************************** * Topic : 用归并排序法对一组数据由小到大进行排序,数据分别为 * 695、458、362、789、12、15、163、23、2、986 * File Name : MergeSort * Author : Jack Cui * Created : 4 April 2016 * ****************************************************************/#include/*归并排序函数声明*/void MergeSort(int iSourceArr[],int iTempArr[],int iStartIndex,int iEndIndex);void Merge(int iSourceArr[],int iTempArr[],int iStartIndex,int iMidIndex,int iEndIndex);int main(void){int i,iArr_b[10],iArr_a[10]; printf("请输入10个数:\n");for(i = 0;i < 10;i++) scanf("%d",&iArr_a[i]); MergeSort(iArr_a,iArr_b,0,9); printf("快速排序后的顺序为:\n");for(i = 0;i < 10;i++) printf("%5d",iArr_a[i]); printf("\n");return 0;}/***********************************函数名称:MergeSort*参数说明:iSourceArr[] 原始数组* iTempArr[] 临时数组* iStartIndex 起始位置索引值* iEndIndex 结束位置索引值*说明: 二路归并排序***********************************/void MergeSort(int iSourceArr[],int iTempArr[],int iStartIndex,int iEndIndex){int iMidIndex;if(iStartIndex < iEndIndex) { iMidIndex = (iStartIndex + iEndIndex) / 2;/*递归调用将iSourceArr[iStartIndex]~iSourceArr[iMidIndex]归并成有序的*/MergeSort(iSourceArr,iTempArr,iStartIndex,iMidIndex);/*递归调用将iSourceArr[iMidIndex+1]~iSourceArr[iEndIndex]归并成有序的*/MergeSort(iSourceArr,iTempArr,iMidIndex+1,iEndIndex);/*调用函数将前两部分归并到iSourceArr[iStartIndex]~iSourceArr[iEndIndex]*/Merge(iSourceArr,iTempArr,iStartIndex,iMidIndex,iEndIndex); }}/***********************************函数名称:Merge*参数说明:iSourceArr[] 原始数组* iTempArr[] 临时数组* iStartIndex 起始位置索引值* iMidIndex 中间位置索引值* iEndIndex 结束位置索引值*说明: 归并排序***********************************/void Merge(int iSourceArr[],int iTempArr[],int iStartIndex,int iMidIndex,int iEndIndex){int i = iStartIndex,j = iMidIndex + 1,k = iStartIndex;while((i <= iMidIndex) && (j <= iEndIndex)) //当i和j都在要合并的部分中成立{if(iSourceArr[i] >= iSourceArr[j]) iTempArr[k++] = iSourceArr[j++];elseiTempArr[k++] = iSourceArr[i++]; }while(i <= iMidIndex) //将iStartIndex~iMidIndex内,未比较的数组顺次加到iTempArr数组中iTempArr[k++] = iSourceArr[i++];while(j <= iEndIndex) //将iMidIndex+1~iStartIndex内,未比较的数组顺次加到iTempArr数组中iTempArr[k++] = iSourceArr[j++];for(i = iStartIndex; i <= iEndIndex; i++) iSourceArr[i] = iTempArr[i];}
3、结果显示
到此,关于"Java归并排序方法怎么使用"的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!
排序
有序
数组
方法
位置
索引
并成
函数
区间
数据
学习
元素
二路
递归
原始
下标
两个
参数
名称
序列
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
浪潮服务器怎么改时间
数据库技术的基础是什么
护苗网络安全课(视频)
创造与魔法搬砖进哪个服务器好
城际软件开发
视频制作软件开发合同
计算机网络安全具有哪些特征
2个数据库查询结果比对
国家网络安全知识竞赛加学分吗
网络安全与道德发言稿300字
闲美软件开发
许愿墙php连接数据库
迅达电梯万能服务器操作说明
服务器配置低怎么提升
国家坚持和完善网络安全
怎样才能使网络安全
深圳测量软件开发公司介绍
数据库技术与应用题库
软件开发工程师转入互联网行业
上海瑞庭网络技术有限公司待遇
设备类公司软件开发是什么样的
服务器分多个子服务器
手机上服务器证书不受信任
服务器隔板
服务器将在3分钟内停机
无锡加工软件开发代理商
小程序软件开发项目介绍
软件开发国标行业
中国中铁网络安全
连不上虚拟机的服务器