/*
目的:练习冒泡排序算法,理解冒泡排序的原理,继续练习数组的使用,继续练习函数的调用!
需求:获取一个随机数列,找出最大值,最小值,并按照从小到大排列;
思路:冒泡排序的排序规则是前一个数字与后一个数字进行比较,如果前面大于后面,则进行交换,否则不交换,以此进行比较到达末尾时,得到末尾的最大值;退出内层循环,进行第二轮比较,依次进行到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 ]
*/
Java学习_BubbleSort
最新推荐文章于 2022-02-18 17:32:46 发布