冒泡java
‘壹’ java冒泡排序
packageTest;
importjava.util.Arrays;
publicclassDemo1{
publicstaticvoidmain(String[]args){
int[]a={2,1,3,9,7,10,8,11,17,6};
//System.out.println(Arrays.toString(a));
sortArr(a,a.length-1,0);
System.out.println(Arrays.toString(a));
sort(a);
System.out.println(Arrays.toString(a));
}
publicstaticvoidsortArr(int[]a,inti,intj){
if(j<i){
sortOne(a,i,j);
}else{
sortOne(a,--i,0);
}
}
publicstaticvoidsortOne(int[]a,inti,intj){
if(i==0)return;
if(a[j+1]<a[j]){
inttemp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
}
sortArr(a,i,++j);
}
publicstaticvoidsort(int[]a)
{
inttemp=0;
for(inti=a.length-1;i>0;--i)
{
for(intj=0;j<i;++j)
{
if(a[j+1]<a[j])
{
temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
}
}
}
}
}
上面代码是从小到大排列
packageTest;
importjava.util.Arrays;
publicclassDemo1{
publicstaticvoidmain(String[]args){
Object[]a={2,1,3,9,7,10,8,11,17,6};
sortArr(a,a.length-1,0);
System.out.println(Arrays.toString(a));
Object[]b={'a','m','s','b','h','e'};
sortArr(b,b.length-1,0);
System.out.println(Arrays.toString(b));
}
publicstaticvoidsortArr(Object[]a,inti,intj){
if(j<i){
sortOne(a,i,j);
}else{
sortOne(a,--i,0);
}
}
publicstaticvoidsortOne(Object[]a,inti,intj){
if(i==0)return;
if(a[j+1]instanceofInteger){
if(Integer.valueOf(""+a[j+1])<Integer.valueOf(""+a[j])){
Objecttemp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
}
}elseif(a[j+1]instanceofCharacter){
if(a[j+1].toString().charAt(0)<a[j].toString().charAt(0)){
Objecttemp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
}
}
sortArr(a,i,++j);
}
// publicstaticvoidsort(int[]a)
// {
// inttemp=0;
// for(inti=a.length-1;i>0;--i)
// {
// for(intj=0;j<i;++j)
// {
// if(a[j+1]<a[j])
// {
// temp=a[j];
// a[j]=a[j+1];
// a[j+1]=temp;
// }
// }
// }
// }
}
‘贰’ java实现冒泡排序
你这样写,相当于只冒了一次泡,把最大的一个数,也就是最后一个数,找出来了,冒泡排序是要for循环里在嵌套一个for循环才能做出来的,外面的for循环控制冒泡多少次,里面的循环找出每次的最大值。你这样写少了外面的那个for循环,相当于只找了一次最大值。
‘叁’ java的冒泡排序
for(int j=1;j<a.length-i;i++)
你这里j=1,改成j=i+1 j<a.length 就可以了
因为你这里是 一个嵌套,数组的长度是固定的为5,另外这里的 i++,应该改成 j++ 估计打错了 我不知道你这里用 j<a.length-i 这里的减i是什么目的?我们可分析一下:当i=0 时j=1 j<a.length-i(值为5-0=5) 1<5可以通过,当i=1 j=2 j<a.length-i(值为5-1=4) 2<4 通过,当i=2 j=3 j<a.lenght-i (值为5-2=3)这时j=3 而a.lenght-i的值也为3 3<3 不成立 所以不通过。j++也将不执行 所以 不能将数组的所有的数进行比较。
‘肆’ 冒泡排序java是
冒泡排序算法:
int类型的数组:3 1 6 2 5
算法:取出最大的放在最后,下次就不用比较最后一个了。*/
public class BubbleSort{
public static void main(String[] args){
int[] a = {3,1,6,2,5};
//开始排序
for(int i=a.length-1;i>0;i--){
for(int j=0;j<i;j++){
if(a[j]>a[j+1]){
//交换位置
int temp;
temp = a[j];
a[j] = a[j+1];
a[j+1] = temp;
//遍历
for(int i=0;i<a.length;i++){
System.out.println(a[i]);
}
算法原理
冒泡排序算法的运作如下:(从后往前)
比较相邻的元素。如果第一个比第二个大,就交换他们两个。
对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。
针对所有的元素重复以上的步骤,除了最后一个。
持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。
‘伍’ java中的冒泡排序
for(int j=0;i<monkeys.length-1-i;j++)
{
if(monkeys[j].height>monkeys[j+1].height) //该行会报数组越界错误
第一行。。for(int j=0;i<monkeys.length-1-i;j++)中的i<monkeys.length-1-i明显逻辑不对。。该是j<monkeys.length-1-i吧
‘陆’ JAVA冒泡
冒泡就是两两交换。。
每循环一次就排好一个数。
10 8 18 7 4
冒泡排序就是内循环
首先用10跟8去比较,10大于8,就进行交换
8 10 18 7 4
然后用10跟18比,不用交换
再用18跟7比,交换,最后跟4比,交换。
第一次外循环结束。
8 10 7 4 18
然后再用8去跟后面的比。。
而18已经排好了,所以就不需要再比较了。。
‘柒’ java中的冒泡排序法
内层循环一次得到这个数组中最大的数并把它放在数组最后一个,同时把内层需要再循环的数组长度减1,即去掉数组中最后一个数(也就是最大的一个)。
外层循环控制内层循环执行几次。
‘捌’ java冒泡排序
其实3楼的回答已经说到重点了,但问题不在于你的if条件里
你这个题的错误在于你排序的内层循环的终止条件有问题
不应该是j<a.length因为这个会得到你数组的长度,而你内层循环做的是对每次比较进行循环,也就是说外层循环是控制一共几个数参与冒泡,而内层则是控制每个数字要跟其他的几个去比较,就好比5个人比身高其中一个要跟几个比?是不是4个呢,他不用跟自己比,因此这个语句需要写成j<a.length-1,那这个时候已经可以正常执行了,但是还不是最好的答案,因为大家都知道冒泡排序是从底下开始将要排序的数据一个个的弄到最上面,那这个过程中外循环执行一次,就会有一个数据在内层循环的工作下,经过比对成功的到顶,那这个数据已经和所有的数据进行过比对了,他已经是最大或者最小的了,后后面的数据再进行比较的时候已经没必要再去跟它比较了,再比虽然不会错,但是会额外的消耗一些性能做一些没意义的事情了。解决方案是修改内循环的结束条件为j<a.length-1-i
为什么减i呢,i是控制每个数字去循环比对的循环中的变量,每比出来一个,它会自加一次,也就是说i是几就代表已经排好几个了,这已经排好的几个,我们已经不需要再去做比较了,因此我们将它们减掉。
另外现在在JAVA里面已经不需要自己手写冒泡排序了,使用util包的Arrays类的sort方法就可以进行排序了,不过还是很认同你的学习精神的,毕竟冒泡排序在其他的语言中还是有用的呵呵。
‘玖’ JAVA中的冒泡排序
为什么可以用BubbleSort来定义
BubbleSort不是变量名,而是类名。 new BubbleSort 是新建一个实例
2.这里面public void sort(int array[])是啥意思
这个是函数定义。 函数名是sort、参数是int array[]
‘拾’ 冒泡社区java与真正的java有什么区别
冒泡不可能支持JAVA,纯粹唬人,因为虚拟内存严重不足,国产或山寨都是五六百KB左右,没个十来兆是不够的,建议楼主别买这些,现在诺基亚五六百S40系统的还是很不错的,比国厂好太多了.手机党,纯手打,望纳!