| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 961 人关注过本帖
标题:关于合并排序(数组越界)的问题
只看楼主 加入收藏
shiyide
Rank: 2
等 级:新手上路
威 望:4
帖 子:297
专家分:0
注 册:2006-2-22
收藏
 问题点数:0 回复次数:4 
关于合并排序(数组越界)的问题
import java.io.*;
public class MegerSort
{
public void meger(int a[],int left,int mid,int right)//将两个已经排好的数组合并成一个数组
{
int temp[]=new int[align=right];
int flag=left;
int i=left;
while(left<right)
{
if(left<=mid&&(mid>right||a[align=left]<=a[mid]))
temp[flag++]=a[left++];
else
temp[flag++]=a[mid++];
}
for(int k=i;k<=right;k++)
{
a[k]=temp[k];
//System.out.print(a[k]+"\t");
}
}
public void megersort(int a[],int left,int right)//合并排序
{
int mid=(left+right)/2;
if(left!=right)
{
megersort(a,left,mid);
megersort(a,mid+1,right);
meger(a,left,mid,right);
}
}
public static void main(String args[])
{
int a[]=new int[] {3,5,7,9,4,2,5,1,6};
MegerSort check=new MegerSort();
check.megersort(a,1,7);
for(int i=0;i<9;i++)
{
System.out.print(a[i]+"\t");
}
}
}
搜索更多相关主题的帖子: 越界 int public java import 
2006-05-23 22:06
shiyide
Rank: 2
等 级:新手上路
威 望:4
帖 子:297
专家分:0
注 册:2006-2-22
收藏
得分:0 

我想问上面的代码出错在哪里


学好编程,为中国的软件事业出一份力。
2006-05-23 22:08
taurus850502
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2006-5-9
收藏
得分:0 

public void meger(int a[],int left,int mid,int right)//将两个已经排好的数组合并成一个数组
{
int temp[]=new int[align=right]; ///// 此处用right作为数组大小不太好,用right - left + 1如何?right前面的数组空间浪费了。
int flag=left;
int i=left;

//////////////////////////////////////////////////////////////////////////////////////////////
while(left<right)
{
if(left<=mid&&(mid>right||a[align=left]<=a[mid]))
temp[flag++]=a[left++];
else
temp[flag++]=a[mid++];
}
整个while循环显得逻辑条理不清晰
//////////////////////////////////////////////////////////////////////////////////////////////
for(int k=i;k<=right;k++)
{
a[k]=temp[k];
//System.out.print(a[k]+"\t");
}
}


改正后的meger函数如下:

public void meger(int a[],int left,int mid,int right)//将两个已经排好的数组合并成一个数组
{
// int temp[]=new int[align=right];
int temp[] = new int[right - left + 1];

int i = left, j = mid + 1, k = 0;

while (i <= mid && j <= right)
{
if (a[i] < a[j])
temp[k++] = a[i++];
else
temp[k++] = a[j++];
}

while (i <= mid)
temp[k++] = a[i++];

while (j <= right)
temp[k++] = a[j++];

for(i = 0, k = left;k <= right; k++)
{
a[k]=temp[i++];
}
}

2006-05-24 01:04
taurus850502
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2006-5-9
收藏
得分:0 
while(left<right)
此处应该注意left是否已经越过mid.
2006-05-24 01:07
shiyide
Rank: 2
等 级:新手上路
威 望:4
帖 子:297
专家分:0
注 册:2006-2-22
收藏
得分:0 
谢谢`
我现在边学JAVA边学算法

我的算法和数据结构好差 所以补补`

谢谢帮忙`

学好编程,为中国的软件事业出一份力。
2006-05-24 17:43
快速回复:关于合并排序(数组越界)的问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.012385 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved