java蓝桥杯排序问题

问题描述
  给定一个长度为n的数列,将这个数列按从小到大的顺序排列。1<=n<=200
输入格式
  第一行为一个整数n。
  第二行包含n个整数,为待排序的数,每个整数的绝对值小于10000。
输出格式
  输出一行,按从小到大的顺序输出排序后的数列。
样例输入
5
8 3 6 4 9
样例输出

3 4 6 8 9

程序:
package jc;

import java.util.Arrays;
import java.util.Scanner;

public class Main {
	
	public static void main(String[] args) {
		Scanner input=new Scanner(System.in);
		int m=input.nextInt();
		int[] a=new int[m];
		for(int i=0;i<m;i++) {
			 a[i]=input.nextInt();
		}
		/*
		 * 系统函数(升序)
		 */
//		Arrays.sort(a);
//		for(int i=0;i<m;i++) {
//			System.out.print(a[i]+" ");
//		}
		//System.out.println(Arrays.toString(a));//输出不符合题目要求
	   /*
	    * 选择排序
	    */
		/*
		for(int i=0;i<m;i++)
			for(int j=i+1;j<m;j++) {
				if(a[i]>a[j]) {
					int t=a[i];
					a[i]=a[j];
					a[j]=t;
				}
			}
		for(int i=0;i<m;i++) {
			System.out.print(a[i]+" ");
		}
		*/
		/*
		 * 冒泡排序
		 */
		for(int i=0;i<m-1;i++) 
			for(int j=0;j<m-1-i;j++) {
				if(a[j]>a[j+1]) {
					int t=a[j];
					a[j]=a[j+1];
					a[j+1]=t;
				}
			}
			
			for(int i=0;i<m;i++) {
				System.out.print(a[i]+" ");//输出要输出a[i],不能输出a,a输出得是地址。
			}
		
		
	}
}

思路:

1.最开始我选择用递归,定义了一个f函数,但f函数中只能定义功能无法是实现输入5个数,故写在主函数中了                              2.进行升序排列,可直接用系统函数,Array.sort()单独一行系统升序函数。                                                                                 System.out.println(Arrays.toString(a));输出结果如下,一直提交不成功,后来意识到输出格式得错误可以用for循环控制输出
  

3.最后用了选择排序。(看for循环)if中是a[i],a[j]得比较。冒泡排序中是a[j]和a[j+1]得比较
   


  4.冒泡排序   
   二层循环:第一层循环控制比较轮数for(int i=0;i<m-1;i++) 5个数需要比较4次
                   第二层循环控制每轮比较得次数for(int j=0;j<m-1-i;j++) 
                   i=0  5个数比较4次 (m-1-i=4)
                   i=1   4个数比较3次(m-1-i=3)
                  ...........


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值