Java学习_SelectionSort

/*
目的:练习使用数组的选择排序法(selection sort),复习数组的使用和操作方法,熟练掌握数组的取数和传值方式特点!
需求:产生一个长度为20的随机数组,打印出其顺序后,使用选择排序法,将随机数组从小到大排列;
思路:使用随机函数产生一个长度为20的随机数组,使用系统打印函数将数组打印,再使用排序功能将数组排序;
步骤:利用for循环和随机函数产生一个长度为20的随机数组;
		打印排序前的随机数组;
		使用选择排序法:利用for的循环嵌套将每一个角标的元素与之后的每一个元素逐一比较;逐次得出最小值;
		注意不用获取排序后的数组:因为数组为引用类型,通过for的嵌套循环的临时操作,已经将数组的值修改了顺序;
		利用系统函数将排序后的数组重新输出;
*/
import java.util.Scanner;
class SelectionSort
{
	public static void main(String[] args)
	{
		System.out.print("请输入随机数组的长度:");
		int n = inputInt();//使用整数输入器:自定义的
		int[] arr = new int[n];
		arr = productArray(n);
		System.out.println("排序前顺序为:");
		printArray(arr);
		Sort(arr);
		newline(1);
		System.out.println("排序后顺序为:");
		printArray(arr);
	}

	//产生一个长度为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 void Sort(int[] arr)
	{
		for (int x = 0;x < arr.length-1 ; x++)//前一个与后一个比较,故外层只用比较到arr.length-1即可,最后两个数的大小即可判明;
		{
			for (int y = x+1;y < arr.length ; y++)
			{
				if(arr[x] > arr[y])
				{
					int temp = arr[x];
					arr[x] = arr[y];
					arr[y] = temp;
				}
			}
		}
	}

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

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


/*
运行结果:
请输入随机数组的长度:20
排序前顺序为:
[ 817 407 904 634 977 746 690 740 891 560 489 26 729 325 155 944 601 110 811 182 ]
排序后顺序为:
[ 26 110 155 182 325 407 489 560 601 634 690 729 740 746 811 817 891 904 944 977 ]

*/
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值