合并排序的问题

问题描述

发了好几次贴解决了好多问题最后我写的代码如下publicclassMergeSort{publicstaticvoidmain(Stringargs[]){int[]arr=setArray();Chargec=newCharge();System.out.println("生成一组10个随机数");print(arr);System.out.println("排列好的数组");c.MergeSort(arr,0,9);print(c.get());}publicstaticvoidprint(int[]Array){//打印一组随机数for(inti=0;i<=9;i++){System.out.print(Array[i]+"t");}}publicstaticint[]setArray(){//生成一组随机数inta[]=newint[10];for(inti=0;i<=9;i++){a[i]=(int)(Math.random()*100);}returna;}}classCharge{privateint[]a=newint[10];privateint[]b=newint[10];publicint[]get(){returnb;}publicvoidMergeSort(int[]Array,intleft,intright){//递归合并数组if(left<right){intmiddle=(left+right)/2;this.MergeSort(Array,left,middle);this.MergeSort(Array,middle+1,right);this.Merge(Array,this.a,left,middle,right);System.arraycopy(this.a,0,this.b,0,right-left+1);}}publicint[]Merge(int[]Arr1,int[]Arr2,intl,intm,intr){//合并数组inti=l;intj=m+1;intk=l;while((i<=m)&&(j<=r)){if(Arr1[i]<=Arr1[j])Arr2[k++]=Arr1[i++];elseArr2[k++]=Arr1[j++];}if(i>m)for(intq=j;q<=r;q++)Arr2[k++]=Arr1[q];elsefor(intq=i;q<=m;q++)Arr2[k++]=Arr1[q];returnArr2;}}

但是运行的结果不对。。是我的算法有问题还是java的结构有问题。。最后还有个小问题。。java中是不是不能像C/C++一样传递地址,不用return就可以改变所引入的参数。。还有。。这学期开始学算法。。感觉学的方法不对。。大家有什么好的建议么。。最后谢谢大家了。。

解决方案

解决方案二:
问题是不是处在c.MergeSort(arr,0,9);这句上,执行到这句话后intmiddle=(left+right)/2;this.MergeSort(Array,left,middle);的this.MergeSort(Array,left,middle);有问题。后面的始终都没有执行。因为left永远都是小于right的。
解决方案三:
引用1楼wuda236556254的回复:

问题是不是处在c.MergeSort(arr,0,9);这句上,执行到这句话后intmiddle=(left+right)/2;this.MergeSort(Array,left,middle);的this.MergeSort(Array,left,middle);有问题。后面的始终都没有执行。因为left永远都是小于rig……

我觉得没错啊。。取int型。。总有left==right的时候。。

时间: 2024-07-28 16:42:44

合并排序的问题的相关文章

浅谈算法和数据结构 三 合并排序

合并排序,顾名思义,就是通过将两个有序的序列合并为一个大的有序的序列的方式来实现排序.合并排序是一种典型的分治算法:首先将序列分为两部分,然后对每一部分进行循环递归的排序,然后逐个将结果进行合并. 合并排序最大的优点是它的时间复杂度为O(nlgn),这个是我们之前的选择排序和插入排序所达不到的.他还是一种稳定性排序,也就是相等的元素在序列中的相对位置在排序前后不会发生变化.他的唯一缺点是,需要利用额外的N的空间来进行排序. 一 原理 合并排序依赖于合并操作,即将两个已经排序的序列合并成一个序列,

Ruby实现的合并排序算法

  这篇文章主要介绍了Ruby实现的合并排序算法,本文直接给出实现代码,需要的朋友可以参考下 算法课的作业,利用分治法,合并排序. ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 #encoding: utf-8 #author: xu jin, 4100213 #date: Oct 27, 2012 #MergeSort #to sort a

Javascript排序算法之合并排序的2个例子介绍

 这篇文章主要介绍了Javascript排序算法之合并排序(归并排序)的2个例子,需要的朋友可以参考下 归并排序(Merge sort)是建立在归并操作上的一种有效的排序算法.该算法是采用分治法(Divide and Conquer)的一个非常典型的应用.   归并(Merge)排序法是将两个(或两个以上)有序表合并成一个新的有序表,即把待排序序列分为若干个子序列,每个子序列是有序的.然后再把有序子序列合并为整体有序序列.   归并排序是建立在归并操作上的一种有效的排序算法.该算法是采用分治法(

源代码-如何c++编程产生白盒测试数据,遍历插入排序,快速排序合并排序的每条分支语句,并输出便历结果

问题描述 如何c++编程产生白盒测试数据,遍历插入排序,快速排序合并排序的每条分支语句,并输出便历结果 如题,想知道会用到什么库函数,该怎么编写语句,用什么算法,如果可以提供一段简单的源代码供参考 解决方案 白盒测试就是阅读代码,编写测试用例,覆盖所有分支,和编写代码无关.

合并排序-两个表各自排序后再按权重合并后排序问题?求高手指点,谢谢.在线等。。

问题描述 两个表各自排序后再按权重合并后排序问题?求高手指点,谢谢.在线等.. 原始需求:这是个仓库自动入库策略, 共6台堆垛机(字段1),同时入库工作,要求根据入库物料在各堆垛机的分布数量,平均分布入库,同时考虑堆垛机入库任务数和繁忙程度.(对物料分布(字段2)查询的结果(如表a查询结果排序)和堆垛机任务数(字段3)查询的结果(表b查询结果排序)分别作比重排序(例如物料分布排序1-6,任务数量排序1-6,两者相加最后综合排序1-6)找出需要入库的堆垛机.) 实现: 表a和表b是2个不同的表,通

C语言实现合并排序

其基本模式如下: 分解:把一个问题分解成与原问题相似的子问题 解决:递归的解各个子问题 合并:合并子问题的结果得到了原问题的解. 现在就用递归算法,采用上面的分治思想来解合并排序. 合并排序(非降序) 分解:把合并排序分解成与两个子问题 伪代码: MERGE_SORT(A, begin, end)  if begin < end     then mid<- int((begin + end)/2)             MERGE_SORT(A, begin, mid)          

排序算法系列之合并排序

       归并排序(Merge sort,合并排序)是建立在归并操作上的一种有效的排序算法.该算法是采用分治法(Divide and Conquer)的一个非常典型的应用. 一 归并操作 基本思想     归并操作(merge),指的是将两个已经排序的序列合并成一个序列的操作,归并排序算法依赖归并操作. 归并操作的过程如下: 申请空间,使其大小为两个已经排序序列之和,该空间用来存放合并后的序列 设定两个指针,最初位置分别为两个已经排序序列的起始位置 比较两个指针所指向的元素,选择相对小的元素

算法-快速排序和合并排序是否可以利用多核进一步加速

问题描述 快速排序和合并排序是否可以利用多核进一步加速 我在研究快速排序和合并排序的时候突然想到这两个算法是否可以利用多核来进一步加快运行效率~ 因为它们是采用了分治法的思想,分解成多个互相独立的子排序,与其他需要顺序执行的排序算法不同~ 没经过系统学习~正在看算法导论~勿喷~ 解决方案 合并排序比较适合多核加速,jdk8的新Arrays.parallelSort API就是这么实现的,quick sort从理论上来说也可以利用多核加速,不过由于其对于不同数据的split有可能出现线性的特点,理

C++实现合并排序的方法_C 语言

本文实例讲述了C++实现合并排序的方法.分享给大家供大家参考.具体如下: //合并排序 #include<iostream> #include<cmath> using namespace std; int num[100]; void print(int num[],int len) { for(int i=0;i<len;i++) { cout<<num[i]<<" "; } cout<<endl; } void m

Python选择排序、冒泡排序、合并排序代码实例_python

前两天刚装了python 3.1.1, 禁不住技痒写点code.1.选择排序 复制代码 代码如下: >>> def SelSort(L):     length=len(L)     for i in range(length-1):         minIdx=i         minVal=L[i]         j=i+1         while j<length:             if minVal>L[j]:                 min