Java学习_BubbleSort

/*
目的:练习冒泡排序算法,理解冒泡排序的原理,继续练习数组的使用,继续练习函数的调用!
需求:获取一个随机数列,找出最大值,最小值,并按照从小到大排列;
思路:冒泡排序的排序规则是前一个数字与后一个数字进行比较,如果前面大于后面,则进行交换,否则不交换,以此进行比较到达末尾时,得到末尾的最大值;退出内层循环,进行第二轮比较,依次进行到arr.length-i-1(i为外循环的次数,-1是为了避免角标越界)
步骤:使用随机函数获得一个长度为20的数组;
		定义一个冒泡排序函数,利用嵌套循环,依次对前后的两个数字进行比较;
		依次得出最大值,次最大值···,;
		调用定义的函数,使用系统输出函数打印排序前后的数组!
*/
import java.util.Scanner;
class BubbleSort
{
	public static void main(String[] args)
	{
		int n;
		System.out.print("请输入数组长度:");
		n = inputInt();
		int[] arr = new int[n];
		arr = productArray(n);
		printArray(arr);
		newline(1);
		bubbleSort(arr);
		printArray(arr);
	}

	public static void bubbleSort(int[] arr)
	{
		for (int x = 0;x < arr.length-1 ;x++ )  //进行到length-1目的是保证前一个与后一个比较
		{
			for (int y = 0;y < arr.length-x-1 ;y++ )//每次都是从第一个元素开始向后比较
			{
				if(arr[y] > arr[y+1])		//判断交换
				{
					int temp = arr[y];
					arr[y] = arr[y+1];
					arr[y+1] = temp;
				}
			}
		}
	}

	//产生一个长度为n的数组;在堆内存中产生一个新的实体,该实体为长度为n的随机数值的数组,
	//利用return将数组的值在释放子函数空间前传给主函数的arr[]
	public static int[] productArray(int n)
	{
		int[] arr = new int[n];
		for(int i =0;i<n;i++)
		{
			arr[i] = (int)(Math.random()*1000);
		}
		return arr;
	}

	//设计一个数组打印函数,因为多次使用打印,避免重复代码
	public static void printArray(int[] arr)		
	{
		System.out.print("[ ");
		for (int x = 0;x < arr.length ;x++ )
		{
			if(x != arr.length-1)
				System.out.print(arr[x]+" ");
			else
				System.out.print(arr[x]+" ]");
		}
	}

	设计一个整数输入器,使用系统输入一个整数
	public static int inputInt()
	{
		Scanner in = new Scanner(System.in);
		//System.out.print("请输入一个整数:");
		int n = in.nextInt();//in.nextline()/in.next():输入字符型(默认);in.nextInt():输入整数;in.next.Double():输入浮点型
		//System.out.println(x);
		in.close();
		return n;
	}

	//设计一个打印空行的函数可以设计换几行
	public static void newline(int nh)
	{
		do
		{
			System.out.println();
			nh--;
		}
		while (nh > 1);
	}
}

/*
运行结果:
请输入数组长度:20
[ 525 17 408 852 11 941 249 915 290 625 675 977 843 186 949 592 38 473 493 455 ]
[ 11 17 38 186 249 290 408 455 473 493 525 592 625 675 843 852 915 941 949 977 ]
*/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值