JAVA快速排序,跪求谁能帮我看看方法哪里错了啊?搞了好多天了!!

2024-05-17 15:16

1. JAVA快速排序,跪求谁能帮我看看方法哪里错了啊?搞了好多天了!!

问题很多
1、在java里,你不能对传进来的实参进行操作
    right--;不可能实现

2、排序算法是从左向右找一个比支点大的,从右向左找一个比支点小的,找不到就一直找
   所以你的if(i<j&&a[i]<a[right])
    		   {
    			   right--;
    		   }
和if(i<j&&a[left]<a[j])
    		   {
    			   left++;
    		   }
需要循环执行,直到找到为止

3、还有你的这个地方,如果left>=right,循环遇到break跳出一层,
也不过是跳出了while(left>=right)这一层,如果left<right,那么不进入循环
 while(left>=right)
    		   {
    			   break;
    		   }
你这段代码有跟没有有什么区别?

4、你的交换排序需要多次执行,而不是只运行一次,所以你的排序主体需要放入循环之中

5、method(a,a[x+1],a[j]);这个方法递归调用后两个参数需要传送的都是int型数组的坐标,即表示从数组第几位起开始快速排序,排到数组第几位,你把数组里的数传进去干什么?如果a数组只能放10个数,但是他放的有一个数是25,那么你调用的时候,方法就会去找数组的第25位,不溢出才怪呢

6、这不是错误,是一个改进:你文本不需要这么大的if条件语句,只需要
if(left>=right)
return;
就可以了,后面的变量什么的都可以不用申请
int temp;
    	   int x;
    	   int i =left;
    	   int j =right;
就是这几个

7、 if(i<j&&a[i]<a[right])
    		   {
    			   right--;
    		   }
    		   if(ia[right])
    		   {   
    			   temp=a[i];
    			   a[i]=a[right];
    			   a[right]=temp;
    		   }
    		   if(i<j&&a[left]<a[j])
    		   {
    			   left++;
    		   }
    		   if(ia[j])
    		   {
    			   temp=a[j];
    			   a[j]=a[left];
    			   a[left]=temp;
    		   }
把支点不停地从左移到右,再从右移到做,麻烦还容易出错,出力不讨好,直接比支点大的和比支点小的交换,一直到左右两个坐标碰头,他们碰头的地方正好是以支点为中心地坐标,左边都比支点大,右边都比支点小,最后循环完了再交换支点位置省时省力


错误和问题如上

更正后代码如下:

public class Main5 {
	public static void method(int[] a,int left,int right)
    {   
	 if(left>=right) 	 //if(i<j)	//直接在这里判断,如果不符合条件
		 return;					//直接返回,不再声明后面的变量
 	   int temp;
 	   int x;
 	   int i =left;
 	   int j =right;
 	   x=a[i];//讲排序序列的第一个数作为支点

 		   j++;//由于是do……while循环,j会被多减一次,提前自增一
 	   while(true){//
 		   
 		   //这里我们先从左面找大的
 		   do{				// if(i<j&&a[left]<a[j])//这个选择需要循环执行
 			   i++;			//{						//直到找到为止
 		   }while(a[i]<x);	//left++;			//方法调用的参数不能修改
 		   					//}
 		   
 		   //再从右面找小的
 		   do{				//if(i<j&&a[i]<a[right])//这个选择需要循环执行
 			   j--;			//{						//直到找到为止
 		   }while(a[j]>x);	//   right--;			//方法调用的参数不能修改
 		   					//}
 		   
 		   if(i>=j)			// while(left>=right)//你这个地方的意思应该这么
 			   				//{					//表达
 			   break;		//break;
 		   					//}
 		   
 		   temp=a[i];//if(ia[right]){	 if(ia[j]){
 		   			//temp=a[i];					temp=a[j];
 		   a[i]=a[j];//a[i]=a[right];          和 	a[j]=a[left];
 		   			//a[right]=temp;}				 a[left]=temp;}
 		   a[j]=temp;//等效于左边部分的代码
 		   //再加上后面那段将左右移好后直接交换支点位置的代码
 	   }
 	   a[left]=a[j];//这里我们直接将支点一次性移到位
 	   a[j]=x;		//交换支点位置
 		  
 	   
 		   method(a,left,j-1);//method(a,a[x+1],a[j]);
 		   //位于j的那个支点我们不用让他再参与排序了
 		   method(a,j+1,right);//method(a,a[i],a[x-1]);
   
    }
}
/*
 * 调用方法时,比如说int n=new int[20];
 * 我们这么调用:method(n,0,19);
 */
加不加分看楼主你的心情好了,但是我这么辛苦,楼主看完记得“对我有帮助”一下哦~

JAVA快速排序,跪求谁能帮我看看方法哪里错了啊?搞了好多天了!!

2. 哪位帮我看看这个配置值好多钱,这样的配置玩天龙八部卡吗?

显卡过时啦,硬盘也就凑活,内存条现在的电脑都是4G1600的,A8的CPU也就是i3的水平,也算是现在的中等层次。总的说这款电脑,还是不要碰,换个方向吧。天龙八部,玩游戏的话就是独显,内存,CPU,散热这些了。

3. 请行家来帮我看看采到的特大蘑菇(直径1米多)是否有药用价值?有图。

非常有价值,
能治疗各种男女不孕不育,
前列腺以及咽喉肿痛,
肺积水以及宫颈炎子宫内膜炎,
胆囊炎以及龟头红肿,
月经不调以及灰指甲,
口腔溃疡以及各种痔疮,
说白了吧,你下辈子都不愁吃穿了 
   鉴定完毕

请行家来帮我看看采到的特大蘑菇(直径1米多)是否有药用价值?有图。

4. 满级剑星帮我看看···第一次玩剑好多不会。。。

35级火神枪在强化以后可以带到50级。因为在那之前,基本遇不到PVP(低级没人了)防具方面可以先穿破灭套到50,一般的打怪下副本都没问题。50级可以选择德巴,或者千夫或精锐千夫,要根据你的经济实力和以后的发展方向而定。
总的来说50级之前,是单纯的打怪升级。装备没有必要追求太多,就算是FB在50级之前也没有什么挑战的。到了50级,由于要打黑暗普埃塔,所以装备要求很高。这时德巴套无论在血还有防御力上基本就够用了。奋力刷黑暗,争取打一套阿奴哈特作为55寺院FB的基础,运气好出了塔爷武器。那么到55之前的武器问题就解决了。
总的来说走FB路线的话,只要拿到了每个副本的主流套装基本进入下一级副本就不成什么问题。但是要是打架的话,千夫首饰,精千套装(万夫更好)武器都是剑星必备的。因为作为近战之王,剑星对于装备的依赖程度高于去他职业。这也是根据你的经济状况而定的。
副本路线和PVP路线。决定了你资金装备投入的先后顺序。如果财力可以的话可以双管齐下。
这只是我个人的一点见解。希望对你有帮助。

5. 玩英雄联盟玩不起来,太卡,谁帮我看看需要换些什么。好多人说换显卡,我需要换什么样子的显卡,价格呢?

换个显卡,你的显卡现存太低。
换的显卡不需要超过两百元,因为换再好点的显卡你的主板和电源功率就不支持了。
换个NVIDIA  210就行挺好的

玩英雄联盟玩不起来,太卡,谁帮我看看需要换些什么。好多人说换显卡,我需要换什么样子的显卡,价格呢?

6. 帮我看看吧 我搞了好久 试了好多软件 还是格式化不了 谢谢了!!!

从你的截图上看,你的H盘可能是4GU盘,而且磁盘格式显示为raw,这说明你的U盘可能发生了硬件故障,你的U盘可以需要针对你U盘所使用芯片对应的重建工具进行初始化,通常这可能需要返厂进行,除非你是非常了解存储芯片的情况。

7. 请各位大侠帮我看看我的配置,很多游戏玩不了,怎么改善?

正如那位老兄所说,你的是集成显卡玩不了很多游戏。
买两个东西:
①内存:再买一个DDR2 1G 800频率的内存
②显卡:显卡方面因为楼主的机器比较老,所以按太好的显卡有点浪费,所以建议你换一个影驰GTS250加强版II,还有一个便宜的影驰GT240中将版。

请各位大侠帮我看看我的配置,很多游戏玩不了,怎么改善?

8. 能帮我看看是什么原因么 头搞的都快爆了 查了好多 还是差不出来

你什么意思啊?有这么提问题的吗?看来,你不适合做程序员,逻辑性太差了。你自己再看看,你看的懂吗?你自己知道在说什么吗?你火星人啊?