博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
归并排序
阅读量:6927 次
发布时间:2019-06-27

本文共 1272 字,大约阅读时间需要 4 分钟。

  

public class Solution {    /*     * 将一个数组中的两个相邻有序区间合并成一个     *     * 参数说明:     *     a -- 包含两个有序区间的数组     *     start -- 第1个有序区间的起始地址。     *     mid   -- 第1个有序区间的结束地址。也是第2个有序区间的起始地址。     *     end   -- 第2个有序区间的结束地址。     */    public static void main(String [] args){        int[] t = {18,7,8,6,33,2,9,1};        mergSort(t,0,7);        for (int i = 0;i
=r) return; int mid = (l+r)/2; //递归二分 将数组分为 [左,中],(中,右] mergSort(arr,l,mid); mergSort(arr,mid+1,r); //归并排序 int aux[] = new int[r-l+1]; //这里弄一个要处理的数组副本 长度是 R-L+1 for (int i =l;i<=r ;i++) //副本数组从 L 开始,所以与原数组存在一个 L 的偏移量 aux[i-l] = arr[i]; int i = l,j = mid+1; //i记录左边元素的下标位置 j记录右边元素的下标位置 for (int k =l;k <= r; k++){ //k记录 arr 的下标位置 if(i >mid){
//第一个数组用完,用第二个数组 arr[k] = aux[j-l]; j++; }else if(j >r){
//第二个数组用完了,用第一个数组
arr[k] = aux[i-l]; i++; }else if(aux[i-l] < aux[j-l]){
//比较两个数组的第一个数,谁小放谁,大的指针不变,直达他说最小的 arr[k] = aux[i-l]; i++; }else{ arr[k] = aux[j-l]; j++; } } } }

 

归并排序(MERGE-SORT)是利用归并的思想实现的排序方法,该算法采用经典的分治(divide-and-conquer)策略(分治法将问题(divide)成一些小的问题然后递归求解,而治(conquer)的阶段则将分的阶段得到的各答案"修补"在一起,即分而治之)。

转载于:https://www.cnblogs.com/nickup/p/9763148.html

你可能感兴趣的文章
redo日志损坏恢复总结
查看>>
东芝MK2546GSX开盘案例
查看>>
JSP中的内部方法和内部类
查看>>
使用Struts2上传图片
查看>>
oVirt项目:开源KVM虚拟化管理
查看>>
基于spring-boot使用Swagger构建restful api文档
查看>>
Micropython:TPYBoard开发板制作红外防坠落小车
查看>>
PO VO DAO DTO BO TO概念与区别
查看>>
Dapper,大规模分布式系统的跟踪系统[转]
查看>>
Python 基础
查看>>
kubernetes之helm部署harbor
查看>>
长辈相处的乐趣
查看>>
Cassandra简介
查看>>
sqlite3 数据操作 查询单个信息
查看>>
Android学习(1)
查看>>
发一个随机红包,100块钱给10个人。每个人最多12块钱,最少6块钱。怎么分?...
查看>>
15个×××的早期症状
查看>>
Java保留两位小数的几种做法
查看>>
nginx rewrite
查看>>
cobbler2.4+CentOS6.4 安装配置
查看>>