这段快速排序 java递归归排序哪里有错

JAVA中递归排序的问题!_百度知道
JAVA中递归排序的问题!
麻烦传个例字源代码?多谢!
为您推荐:
其他2条回答
递归排序可以分为好多种,归并,计数,冒泡,选择,插入等等,
public static void SimpleSelectSort(Data[] data) {
for (i = 1; i & data. i++) {
j = MinKey(data, i);
if (j != i) {
temp = data[i];
data[i] = data[j];
private static int MinKey(Data[] data, int start) {
int i, j =
temp = data[start].
if (data.length - start == 0) {
for (i = start + 1; i & data. i++) {
if (pareTo(data[i].key) & 0) {
temp = data[i].
您可能关注的推广
递归的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁请看看这个java 递归哪错了_百度知道
请看看这个java 递归哪错了
System.println(a1(4.
}else{c=a+3;
}return a1(c.*import java.public class A{ public static void main(String args[]){ System,b);
}}public int a1(=b){
if(b%a==0){c=c+1,16));
if(a&lt.out.println(a,int b){
提问者采纳
out,b)? 如果是a1这个方法最后那个System.println(a你说的是编译出错是吗
其他类似问题
为您推荐:
递归的相关知识
其他2条回答
所以将无限制的递归下去递归要保证最里层有返回值,而你现在只有一个return a1(c,也就是说int a1(int a,b-1),int b)至少应该有两个return的地方才能跳出递归;
//帮你调试没错误了,但还是不懂你的程序要干嘛?import java.util.*;public class A{ public static void main(String args[]){ System.out.println(a1(4,16));
static int a1(int a,int b){
if(b%a==0){c=c+1;
}else{c=a+3;
}return a1(c,b-1);
//System.out.println(a+& &+b); }}
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁2227人阅读
面试题总汇(21)
7、递归算法题1
一个整数,大于0,不用循环和本地变量,按照n,2n,4n,8n的顺序递增,当值大于5000时,把值按照指定顺序输出来。
例:n=1237
则输出为:
提示:写程序时,先致谢按递增方式的代码,写好递增的以后,再增加考虑递减部分。
&& public static void doubleNum(int n)
&&&&& System.out.println(n);
&&&&& if(n&=5000)
&&&&&&& doubleNum(n*2);
&&&&& System.out.println(n);&&
&&&&&&&&&&&&&&&&&&&&&&&
Gaibaota(N) = Gaibaota(N-1) + n
7、递归算法题2
第1个人10,第2个比第1个人大2岁,依次递推,请用递归方式计算出第8个人多大?
package cn.
importjava.util.D
public class A1 {
public static void main(String [] args)
System.out.println(computeAge(8));
public static int computeAge(int n)
if(n==1) return 10;
return computeAge(n-1)+ 2;
public static void toBinary(int n,StringBuffer result)
if(n/2 != 0)
toBinary(n/2,result);
result.append(n%2);
94、排序都有哪几种方法?请列举。用JAVA实现一个快速排序。
本人只研究过冒泡排序、选择排序和快速排序,下面是快速排序的代码:
public class QuickSort {
* 快速排序
* @param strDate
* @param left
* @param right
public void quickSort(String[] strDate,int left,int right){
String middle,tempD
middle=strDate[(i+j)/2];
while(strDate[i].compareTo(middle)&0&& i&right)
i++; //找出左边比中间值大的数
while(strDate[j].compareTo(middle)&0&& j&left)
j--; //找出右边比中间值小的数
if(i&=j){ //将左边大的数和右边小的数进行替换
tempDate=strDate[i];
strDate[i]=strDate[j];
strDate[j]=tempD
}while(i&=j); //当两者交错时停止
if(i&right){
quickSort(strDate,i,right);//从
if(j&left){
quickSort(strDate,left,j);
* @param args
public static void main(String[] args){
String[] strVoid=newString[]{&11&,&66&,&22&,&0&,&55&,&22&,&0&,&32&};
QuickSort sort=new QuickSort();
sort.quickSort(strVoid,0,strVoid.length-1);
for(int i=0;i&strVoid.i++){
System.out.println(strVoid[i]+& &);
7、有数组a[n],用java代码将数组元素顺序颠倒
//用下面的也可以
//for(int i=0,int j=a.length-1;i&j;i++,j--) 是否等效于 for(int i=0;i&a.length/2;i++)呢?
importjava.util.A
public classSwapDemo{
public static void main(String[] args){
int [] a = new int[]{
(int)(Math.random() * 1000),
(int)(Math.random()* 1000),
(int)(Math.random() * 1000),
(int)(Math.random() * 1000),
(int)(Math.random() * 1000)
System.out.println(a);
System.out.println(Arrays.toString(a));
System.out.println(Arrays.toString(a));
public static void swap(int a[]){
int len = a.
for(int i=0;i&len/2;i++){
int tmp = a[i];
a[i] = a[len-1-i];
a[len-1-i] =
2.金额转换,阿拉伯数字的金额转换成中国传统的形式如:(¥1011)-&(一千零一拾一元整)输出。
去零的代码:
returnsb.reverse().toString().replaceAll(&零[拾佰仟]&,&零&).replaceAll(&零+万&,&万&).replaceAll(&零+元&,&元&).replaceAll(&零+&,&零&);
public class RenMingBi {
* @param args add by zxx ,Nov 29, 2008
private static final char[]data = new char[]{
'零','壹','贰','叁','肆','伍','陆','柒','捌','玖'
private static final char[]units = new char[]{
'元','拾','佰','仟','万','拾','佰','仟','亿'
public static voidmain(String[] args) {
// TODOAuto-generated method stub
System.out.println(
convert());
public static Stringconvert(int money)
StringBuffer sbf =new StringBuffer();
int unit = 0;
while(money!=0)
sbf.insert(0,units[unit++]);
int number =money%10;
sbf.insert(0,data[number]);
money /= 10;
return sbf.toString();
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:110365次
积分:1285
积分:1285
排名:千里之外
原创:22篇/**&&&*&冒泡法排序&br/&&&&*&&li&比较相邻的元素。如果第一个比第二个大,就交换他们两个。&/li&&&&*&&li&对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。&/li&&&&*&&li&针对所有的元素重复以上的步骤,除了最后一个。&/li&&&&*&&li&持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。&/li&&&&*&&&&*&@param&numbers&&&*&&&&&&&&&&&&需要排序的整型数组&&&*/&&public&static&void&bubbleSort(int[]&numbers)&{&&&&&&&int&&//&记录临时中间值&&&&&&&int&size&=&numbers.&//&数组大小&&&&&&&for&(int&i&=&<span style="color: #;&i&&&size&-&<span style="color: #;&i++)&{&&&&&&&&&&&for&(int&j&=&i&+&<span style="color: #;&j&&&&j++)&{&&&&&&&&&&&&&&&if&(numbers[i]&&&numbers[j])&{&//&交换两数的位置&&&&&&&&&&&&&&&&&&&temp&=&numbers[i];&&&&&&&&&&&&&&&&&&&numbers[i]&=&numbers[j];&&&&&&&&&&&&&&&&&&&numbers[j]&=&&&&&&&&&&&&&&&&}&&&&&&&&&&&}&&&&&&&}&&&}&&
快速排序使用分治法策略来把一个序列分为两个子序列。
/**&&&*&快速排序&br/&&&&*&&ul&&&&*&&li&从数列中挑出一个元素,称为&#8220;基准&#8221;&/li&&&&*&&li&重新排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆在基准的后面(相同的数可以到任一边)。在这个分割之后,&&&*&该基准是它的最后位置。这个称为分割(partition)操作。&/li&&&&*&&li&递归地把小于基准值元素的子数列和大于基准值元素的子数列排序。&/li&&&&*&&/ul&&&&*&&&&*&@param&numbers&&&*&@param&start&&&*&@param&end&&&*/&&public&static&void&quickSort(int[]&numbers,&int&start,&int&end)&{&&&&&&&if&(start&&&end)&{&&&&&&&&&&&int&base&=&numbers[start];&//&选定的基准值(第一个数值作为基准值)&&&&&&&&&&&int&&//&记录临时中间值&&&&&&&&&&&int&i&=&start,&j&=&&&&&&&&&&&&do&{&&&&&&&&&&&&&&&while&((numbers[i]&&&base)&&&&(i&&&end))&&&&&&&&&&&&&&&&&&&i++;&&&&&&&&&&&&&&&while&((numbers[j]&&&base)&&&&(j&&&start))&&&&&&&&&&&&&&&&&&&j--;&&&&&&&&&&&&&&&if&(i&&=&j)&{&&&&&&&&&&&&&&&&&&&temp&=&numbers[i];&&&&&&&&&&&&&&&&&&&numbers[i]&=&numbers[j];&&&&&&&&&&&&&&&&&&&numbers[j]&=&&&&&&&&&&&&&&&&&&&&i++;&&&&&&&&&&&&&&&&&&&j--;&&&&&&&&&&&&&&&}&&&&&&&&&&&}&while&(i&&=&j);&&&&&&&&&&&if&(start&&&j)&&&&&&&&&&&&&&&quickSort(numbers,&start,&j);&&&&&&&&&&&if&(end&&&i)&&&&&&&&&&&&&&&quickSort(numbers,&i,&end);&&&&&&&}&&&}&&
选择排序是一种简单直观的排序方法,每次寻找序列中的最小值,然后放在最末尾的位置。
/**&&&*&选择排序&br/&&&&*&&li&在未排序序列中找到最小元素,存放到排序序列的起始位置&/li&&&&*&&li&再从剩余未排序元素中继续寻找最小元素,然后放到排序序列末尾。&/li&&&&*&&li&以此类推,直到所有元素均排序完毕。&/li&&&&*&&&&*&@param&numbers&&&*/&&public&static&void&selectSort(int[]&numbers)&{&&&&&&&int&size&=&numbers.length,&&&&&&&&for&(int&i&=&<span style="color: #;&i&&&&i++)&{&&&&&&&&&&&int&k&=&i;&&&&&&&&&&&for&(int&j&=&size&-&<span style="color: #;&j&&i;&j--)&&{&&&&&&&&&&&&&&&if&(numbers[j]&&&numbers[k])&&k&=&j;&&&&&&&&&&&}&&&&&&&&&&&temp&=&numbers[i];&&&&&&&&&&&numbers[i]&=&numbers[k];&&&&&&&&&&&numbers[k]&=&&&&&&&&}&&&}&&
插入排序的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。其具体步骤参见代码及注释。
/**&&&*&插入排序&br/&&&&*&&ul&&&&*&&li&从第一个元素开始,该元素可以认为已经被排序&/li&&&&*&&li&取出下一个元素,在已经排序的元素序列中从后向前扫描&/li&&&&*&&li&如果该元素(已排序)大于新元素,将该元素移到下一位置&/li&&&&*&&li&重复步骤3,直到找到已排序的元素小于或者等于新元素的位置&/li&&&&*&&li&将新元素插入到该位置中&/li&&&&*&&li&重复步骤2&/li&&&&*&&/ul&&&&*&&&&*&@param&numbers&&&*/&&public&static&void&insertSort(int[]&numbers)&{&&&&&&&int&size&=&numbers.length,&temp,&j;&&&&&&&for(int&i=<span style="color: #;&i&&i++)&{&&&&&&&&&&&temp&=&numbers[i];&&&&&&&&&&&for(j&=&i;&j&&&<span style="color: #&&&&temp&&&numbers[j-<span style="color: #];&j--)&&&&&&&&&&&&&&&numbers[j]&=&numbers[j-<span style="color: #];&&&&&&&&&&&numbers[j]&=&&&&&&&&}&&&}&&
归并排序是建立在归并操作上的一种有效的排序算法,归并是指将两个已经排序的序列合并成一个序列的操作。参考代码如下:
/**&&&*&归并排序&br/&&&&*&&ul&&&&*&&li&申请空间,使其大小为两个已经排序序列之和,该空间用来存放合并后的序列&/li&&&&*&&li&设定两个指针,最初位置分别为两个已经排序序列的起始位置&/li&&&&*&&li&比较两个指针所指向的元素,选择相对小的元素放入到合并空间,并移动指针到下一位置&/li&&&&*&&li&重复步骤3直到某一指针达到序列尾&/li&&&&*&&li&将另一序列剩下的所有元素直接复制到合并序列尾&/li&&&&*&&/ul&&&&*&&&&*&@param&numbers&&&*/&&public&static&void&mergeSort(int[]&numbers,&int&left,&int&right)&{&&&&&&&int&t&=&<span style="color: #;//&每组元素个数&&&&&&&int&size&=&right&-&left&+&<span style="color: #;&&&&&&&while&(t&&&size)&{&&&&&&&&&&&int&s&=&t;//&本次循环每组元素个数&&&&&&&&&&&t&=&<span style="color: #&*&s;&&&&&&&&&&&int&i&=&&&&&&&&&&&&while&(i&+&(t&-&<span style="color: #)&&&size)&{&&&&&&&&&&&&&&&merge(numbers,&i,&i&+&(s&-&<span style="color: #),&i&+&(t&-&<span style="color: #));&&&&&&&&&&&&&&&i&+=&t;&&&&&&&&&&&}&&&&&&&&&&&if&(i&+&(s&-&<span style="color: #)&&&right)&&&&&&&&&&&&&&&merge(numbers,&i,&i&+&(s&-&<span style="color: #),&right);&&&&&&&}&&&}&&&/**&&&*&归并算法实现&&&*&&&&*&@param&data&&&*&@param&p&&&*&@param&q&&&*&@param&r&&&*/&&private&static&void&merge(int[]&data,&int&p,&int&q,&int&r)&{&&&&&&&int[]&B&=&new&int[data.length];&&&&&&&int&s&=&p;&&&&&&&int&t&=&q&+&<span style="color: #;&&&&&&&int&k&=&p;&&&&&&&while&(s&&=&q&&&&t&&=&r)&{&&&&&&&&&&&if&(data[s]&&=&data[t])&{&&&&&&&&&&&&&&&B[k]&=&data[s];&&&&&&&&&&&&&&&s++;&&&&&&&&&&&}&else&{&&&&&&&&&&&&&&&B[k]&=&data[t];&&&&&&&&&&&&&&&t++;&&&&&&&&&&&}&&&&&&&&&&&k++;&&&&&&&}&&&&&&&if&(s&==&q&+&<span style="color: #)&&&&&&&&&&&B[k++]&=&data[t++];&&&&&&&else&&&&&&&&&&B[k++]&=&data[s++];&&&&&&&for&(int&i&=&p;&i&&=&r;&i++)&&&&&&&&&&&data[i]&=&B[i];&&&}&&
&将之前介绍的所有排序算法整理成NumberSort类,代码
package&test.&&&import&java.util.R&&&//Java实现的排序类&&public&class&NumberSort&{&&&&&&&//私有构造方法,禁止实例化&&&&&&private&NumberSort()&{&&&&&&&&&&&super();&&&&&&&}&&&&&&&&//冒泡法排序&&&&&public&static&void&bubbleSort(int[]&numbers)&{&&&&&&&&&&&int&&//&记录临时中间值&&&&&&&&&&&int&size&=&numbers.&//&数组大小&&&&&&&&&&&for&(int&i&=&<span style="color: #;&i&&&size&-&<span style="color: #;&i++)&{&&&&&&&&&&&&&&&for&(int&j&=&i&+&<span style="color: #;&j&&&&j++)&{&&&&&&&&&&&&&&&&&&&if&(numbers[i]&&&numbers[j])&{&//&交换两数的位置&&&&&&&&&&&&&&&&&&&&&&&temp&=&numbers[i];&&&&&&&&&&&&&&&&&&&&&&&numbers[i]&=&numbers[j];&&&&&&&&&&&&&&&&&&&&&&&numbers[j]&=&&&&&&&&&&&&&&&&&&&&}&&&&&&&&&&&&&&&}&&&&&&&&&&&}&&&&&&&}&&&&&&&//快速排序&&&&public&static&void&quickSort(int[]&numbers,&int&start,&int&end)&{&&&&&&&&&&&if&(start&&&end)&{&&&&&&&&&&&&&&&int&base&=&numbers[start];&//&选定的基准值(第一个数值作为基准值)&&&&&&&&&&&&&&&int&&//&记录临时中间值&&&&&&&&&&&&&&&int&i&=&start,&j&=&&&&&&&&&&&&&&&&do&{&&&&&&&&&&&&&&&&&&&while&((numbers[i]&&&base)&&&&(i&&&end))&&&&&&&&&&&&&&&&&&&&&&&i++;&&&&&&&&&&&&&&&&&&&while&((numbers[j]&&&base)&&&&(j&&&start))&&&&&&&&&&&&&&&&&&&&&&&j--;&&&&&&&&&&&&&&&&&&&if&(i&&=&j)&{&&&&&&&&&&&&&&&&&&&&&&&temp&=&numbers[i];&&&&&&&&&&&&&&&&&&&&&&&numbers[i]&=&numbers[j];&&&&&&&&&&&&&&&&&&&&&&&numbers[j]&=&&&&&&&&&&&&&&&&&&&&&&&&i++;&&&&&&&&&&&&&&&&&&&&&&&j--;&&&&&&&&&&&&&&&&&&&}&&&&&&&&&&&&&&&}&while&(i&&=&j);&&&&&&&&&&&&&&&if&(start&&&j)&&&&&&&&&&&&&&&&&&&quickSort(numbers,&start,&j);&&&&&&&&&&&&&&&if&(end&&&i)&&&&&&&&&&&&&&&&&&&quickSort(numbers,&i,&end);&&&&&&&&&&&}&&&&&&&}&&&&&&&//选择排序&&&&&public&static&void&selectSort(int[]&numbers)&{&&&&&&&&&&&int&size&=&numbers.length,&&&&&&&&&&&&for&(int&i&=&<span style="color: #;&i&&&&i++)&{&&&&&&&&&&&&&&&int&k&=&i;&&&&&&&&&&&&&&&for&(int&j&=&size&-&<span style="color: #;&j&&&i;&j--)&{&&&&&&&&&&&&&&&&&&&if&(numbers[j]&&&numbers[k])&&&&&&&&&&&&&&&&&&&&&&&k&=&j;&&&&&&&&&&&&&&&}&&&&&&&&&&&&&&&temp&=&numbers[i];&&&&&&&&&&&&&&&numbers[i]&=&numbers[k];&&&&&&&&&&&&&&&numbers[k]&=&&&&&&&&&&&&}&&&&&&&}&&&&&&&//插入排序&&&&&&&&//&@param&numbers&&&&&&public&static&void&insertSort(int[]&numbers)&{&&&&&&&&&&&int&size&=&numbers.length,&temp,&j;&&&&&&&&&&&for&(int&i&=&<span style="color: #;&i&&&&i++)&{&&&&&&&&&&&&&&&temp&=&numbers[i];&&&&&&&&&&&&&&&for&(j&=&i;&j&&&<span style="color: #&&&&temp&&&numbers[j&-&<span style="color: #];&j--)&&&&&&&&&&&&&&&&&&&numbers[j]&=&numbers[j&-&<span style="color: #];&&&&&&&&&&&&&&&numbers[j]&=&&&&&&&&&&&&}&&&&&&&}&&&&&&&//归并排序&&&&&&public&static&void&mergeSort(int[]&numbers,&int&left,&int&right)&{&&&&&&&&&&&int&t&=&<span style="color: #;//&每组元素个数&&&&&&&&&&&int&size&=&right&-&left&+&<span style="color: #;&&&&&&&&&&&while&(t&&&size)&{&&&&&&&&&&&&&&&int&s&=&t;//&本次循环每组元素个数&&&&&&&&&&&&&&&t&=&<span style="color: #&*&s;&&&&&&&&&&&&&&&int&i&=&&&&&&&&&&&&&&&&while&(i&+&(t&-&<span style="color: #)&&&size)&{&&&&&&&&&&&&&&&&&&&merge(numbers,&i,&i&+&(s&-&<span style="color: #),&i&+&(t&-&<span style="color: #));&&&&&&&&&&&&&&&&&&&i&+=&t;&&&&&&&&&&&&&&&}&&&&&&&&&&&&&&&if&(i&+&(s&-&<span style="color: #)&&&right)&&&&&&&&&&&&&&&&&&&merge(numbers,&i,&i&+&(s&-&<span style="color: #),&right);&&&&&&&&&&&}&&&&&&&}&&&&&&&&//归并算法实现&&&&&&private&static&void&merge(int[]&data,&int&p,&int&q,&int&r)&{&&&&&&&&&&&int[]&B&=&new&int[data.length];&&&&&&&&&&&int&s&=&p;&&&&&&&&&&&int&t&=&q&+&<span style="color: #;&&&&&&&&&&&int&k&=&p;&&&&&&&&&&&while&(s&&=&q&&&&t&&=&r)&{&&&&&&&&&&&&&&&if&(data[s]&&=&data[t])&{&&&&&&&&&&&&&&&&&&&B[k]&=&data[s];&&&&&&&&&&&&&&&&&&&s++;&&&&&&&&&&&&&&&}&else&{&&&&&&&&&&&&&&&&&&&B[k]&=&data[t];&&&&&&&&&&&&&&&&&&&t++;&&&&&&&&&&&&&&&}&&&&&&&&&&&&&&&k++;&&&&&&&&&&&}&&&&&&&&&&&if&(s&==&q&+&<span style="color: #)&&&&&&&&&&&&&&&B[k++]&=&data[t++];&&&&&&&&&&&else&&&&&&&&&&&&&&B[k++]&=&data[s++];&&&&&&&&&&&for&(int&i&=&p;&i&&=&r;&i++)&&&&&&&&&&&&&&&data[i]&=&B[i];&&&&&&&}&&&&&}&&
数字排序算法通常用来作为算法入门课程的基本内容,在实际应用(尤其是普通商业软件)中使用的频率较低,但是通过排序算法的实现,可以深入了解计算机语言的特点,可以以此作为学习各种编程语言的基础。
随笔 - 677&#xe621; 上传我的文档
&#xe602; 下载
&#xe60c; 收藏
该文档贡献者很忙,什么也没留下。
&#xe602; 下载此文档
正在努力加载中...
java 用递归方法求n个数的无重复全排列
下载积分:400
内容提示:java 用递归方法求n个数的无重复全排列
文档格式:DOCX|
浏览次数:47|
上传日期: 17:19:28|
文档星级:&#xe60b;&#xe60b;&#xe612;&#xe612;&#xe612;
该用户还上传了这些文档
java 用递归方法求n个数的无重复全排列
官方公共微信}

我要回帖

更多关于 java快速排序非递归 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信