吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 4186|回复: 19
收起左侧

[Java 转载] 冒泡排序加强版!!!!也请大神给看看。。别见笑。

  [复制链接]
mimiwuqi 发表于 2017-12-20 22:56
本帖最后由 mimiwuqi 于 2017-12-20 23:28 编辑

学了冒泡排序,感觉很好玩,就把前面学得初级知识组合在一起,算是个加强版的冒泡排序小程序吧。
我也是小白,刚起步,大家一起来学习。大神不要见笑啊
注意,都是int类型的,只能对int类型的进行排序。
程序好像有点问题,当降序排完之后,再升序排就排不出来了。看来想法是好的,结果不是想要的。。。。。
我再找找问题所在,大神也帮帮我,谢谢,见笑了。

以下是代码:
import java.util.*;
public class order{
        public static void main(String[] args){
                Scanner in=new Scanner(System.in);
                for(;;){
                        System.out.println("你要输入多少数字进行排序:");
                        int num=in.nextInt();
                        int a[]=new int[num];
                        for(int i=0;i<a.length;i++){
                                System.out.println("输入第"+(i+1)+"个数。");
                                a=in.nextInt();
                        }
                        for(;;){
                                System.out.println("你想要什么排序?输入1为降序排序,2为升序排序。");
                                int select=in.nextInt();
                                switch(select){
                                        case 1:
                                        for(int i=0;i<a.length-1;i++){        
                                                for(int j=a.length-1;j>0;j--){
                                                        if(a[j]>a[j-1]){
                                                                int t=a[j];
                                                                a[j]=a[j-1];
                                                                a[j-1]=t;
                                                        }
                                                }
                                        }break;
                                        case 2:
                                        for(int i=0;i<a.length-1;i++){        
                                                for(int j=0;j>a.length-1;j++){
                                                        if(a[j]>a[j+1]){
                                                                int t=a[j];
                                                                a[j]=a[j+1];
                                                                a[j+1]=t;
                                                        }
                                                }
                                        }break;
                                }
                                System.out.println("排好的顺序为:");
                                for(int i=0;i<a.length;i++){
                                        System.out.println(a);    //编辑的时候能看到下标啊,怎么发出帖子后数组下标没了???应该是a
                                }
                                System.out.println("还要看看另一种排序吗?想,输入y,否则n退出。");
                                String other=in.next();
                                if(other.equals("y")){
                                        System.out.println("咱们继续。");
                                }else{
                                        break;
                                }
                        }
                        System.out.println("想要重新输入一组数来排序吗?想,输入y,否则n退出。");
                                String other=in.next();
                                if(other.equals("y")){
                                        System.out.println("好的继续。");
                                }else{
                                        break;
                                }
                }
        }
}

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

jxh 发表于 2017-12-22 10:11
本帖最后由 jxh 于 2017-12-22 10:18 编辑

[Java] 纯文本查看 复制代码
//package tank;
import java.util.*;
public class Start{
        public static void main(String[] args){
                Scanner in=new Scanner(System.in);
                System.out.println("你要输入多少数字进行排序:");
                int num=in.nextInt();
                int [] a=new int[num];//创建一个数组
                for(int i=0;i<a.length;i++){
                        System.out.println("输入第"+(i+1)+"个数。");
                        a[i]=in.nextInt();
                }
                for(;;){
                        System.out.println("你想要什么排序?输入1为降序排序,2为升序排序。");
                        int select=in.nextInt();
                        switch(select){
                        case 1:
                                for(int i=0;i<a.length-1;i++){                //降序排列     
                                        for(int j=a.length-1;j>0;j--){
                                                if(a[j]>a[j-1]){
                                                        int t=a[j];
                                                        a[j]=a[j-1];
                                                        a[j-1]=t;
                                                }
                                        }
                                }
                                break;
                        case 2:
                                for(int i=0;i<a.length-1;i++){                //升序排列
                                        for(int j=a.length-1;j>0;j--){
                                                if(a[j]<a[j-1]){
                                                        int t=a[j];
                                                        a[j]=a[j-1];
                                                        a[j-1]=t;
                                                }
                                        }
                                }
                                break;
                        }
                        
                        System.out.println("排好的顺序为:");
//                        for(int i=0;i<a.length;i++){
//                                System.out.println(a[i]);
//                        }
                        //使用foreach 遍历数组
//                        for(元素类型t 元素变量x : 遍历对象obj){
//                             引用了x的java语句;
//                        } 
                       for (int i : a) {
                                System.out.println(i);//逐个输出数组元素的值 
                        }
                        
                        System.out.println("还要看看另一种排序吗?想,输入y,否则n退出。");
                        String other=in.next();
                        if(other.equals("y")){
                                continue;//使用关键字 返回到 for循环开头
                        }else{
                                break;//跳出for循环
                        }
                }//外层 for End
                
        }
}

改好了 应该没有BUG  麻烦评分一下 给点CB

免费评分

参与人数 3吾爱币 +3 热心值 +3 收起 理由
ligougous + 1 + 1 热心回复!
ckl2017 + 1 + 1 热心回复!
mimiwuqi + 1 + 1 热心回复!

查看全部评分

qq8945051 发表于 2018-1-4 00:11
[Java] 纯文本查看 复制代码
package 排序;

import java.util.*;

public class Start {
	public static void main(String[] args) {
		String other;
		Scanner in = new Scanner(System.in);
		System.out.println("你要输入多少数字进行排序:");
		int num = in.nextInt();
		int[] a = new int[num];
		for (int i = 0; i < a.length; i++) {
			System.out.println("输入第" + (i + 1) + "个数:");
			a[i] = in.nextInt();
		}
		Start s = new Start();
		a = s.num3(a);
		System.out.println("你想要什么排序?输入1为降序排序,2为升序排序。");
		int select = in.nextInt();
		do {
			switch (select) {
			case 2:
				System.out.print("升序排序:");
				for (int i = 0; i < a.length; i++) {
					System.out.print(a[i] + " ");
				}
				System.out.println("");
				break;

			case 1:
				System.out.print("降序排序:");
				for (int i = a.length; i > 0; i--) {
					System.out.print(a[i - 1] + " ");
				}
				System.out.println("");
				break;
			}
			System.out.println("还要看看另一种排序吗?想,输入任意键,n退出。");
			other = in.next();
			if (select==1) {
				select=2;
			}else{
				select=1;
			}
		} while (!other.equals("n"));
		System.out.println("结束!");
	}

	// 1.第一种冒泡排序
	public int[] num1(int[] a) {
		for (int i = 0; i < a.length - 1; i++) {
			for (int j = 0; j < a.length - 1; j++) {
				// 比较大小移位
				if (a[j] > a[j + 1]) {
					int temp = a[j];
					a[j] = a[j + 1];
					a[j + 1] = temp;
				}
			}
		}
		return a;
	}

	// 2.数组的选择排序
	public int[] num2(int[] a) {
		for (int i = 1; i < a.length; i++) {
			int index = 0;
			for (int j = 1; j <= a.length - i; j++) {
				if (a[j] > a[index]) {
					index = j;
				}
			}
			int temp = a[a.length - i];
			a[a.length - i] = a[index];
			a[index] = temp;
		}
		return a;
	}

	// 3.数组的插入排序
	public int[] num3(int[] a) {
		int n = a.length;
		for (int i = 1; i < n; i++) { // 将a[i]插入a[0:i-1]
			int t = a[i];
			int j;
			for (j = i - 1; j >= 0 && t < a[j]; j--) {
				a[j + 1] = a[j];
			}
			a[j + 1] = t;
		}
		return a;
	}

	// 4.设置两层循环
	public int[] num4(int[] a) {
		for (int i = 0; i < a.length - 1; i++) {
			for (int j = 0; j < a.length - 1; j++) {
				// 比较大小移位
				if (a[j] > a[j + 1]) {
					int temp = a[j];
					a[j] = a[j + 1];
					a[j + 1] = temp;
				}
			}
		}
		return a;
	}
	//5.Arrays.sort排序
	public int[] num5(int[] a) {
		Arrays.sort(a);
		return a;
	}

}
 楼主| mimiwuqi 发表于 2017-12-20 23:06
程序好像有点问题,当降序排完之后,再升序排就排不出来了。看来想法是好的,结果不是想要的。。。。。
我再找找问题所在,大神也帮帮我,谢谢,见笑了。
学习技术那家强 发表于 2017-12-20 23:06
Java  从入门到放弃  我已经不想这个了!
kk1212 发表于 2017-12-20 23:19
学习一下,感谢分享代码
pmc 发表于 2017-12-21 00:02
任真地看了楼主的源代码,不过由于没学过Java 有些地方还是没看懂,不过关于楼主提出的问题我倒是这么想的:降序排完之后没必要再升序排列了,直接反着遍历输出就好了。
楼主那个冒泡的循环判断语句可以稍微改一下,外层循环每循环一次,内层循环可以少循环一次了,可以稍微提高一下效率。
clocks 发表于 2017-12-21 00:06
加油  慢慢积攒 新一代大神正在诞生  加油
让导弹飞 发表于 2017-12-21 00:12
算法高于一切,你这方法效率太低了,本人也学习中。
新司机丶听雪 发表于 2017-12-21 14:10
我讨厌数据结构!!
 楼主| mimiwuqi 发表于 2017-12-21 15:40
让导弹飞 发表于 2017-12-21 00:12
算法高于一切,你这方法效率太低了,本人也学习中。

现在不是我算法低的问题,结果都不对呢。。。。
 楼主| mimiwuqi 发表于 2017-12-21 15:42
pmc 发表于 2017-12-21 00:02
任真地看了楼主的源代码,不过由于没学过Java 有些地方还是没看懂,不过关于楼主提出的问题我倒是这么想的: ...

毕竟是刚学,没有什么基础,算法什么的还真不懂呢。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-15 10:57

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表