冒泡排序法、选择排序法、插入排序法

6 篇文章 0 订阅

一贯作风,不说废话,代码走起

先是测试代码:

	@Test
	public void test1() {
		//随机生成length为10 的数组
		int[] arr=new int[10];
		for (int i=0;i<arr.length;i++) {
			arr[i]=(int)(Math.random()*10);
		}
		System.out.println("冒泡排序");
		bubbleSort(arr);
		System.out.println("选择排序");
		selectSort(arr);
		System.out.println("插入排序");
		insertSort(arr);
	}

各排序法:

	/**
	 * 冒泡排序
	 * @param arr 需排序的数组
	 */
	public void bubbleSort(int[] arr) {
		int temp;
		//排序的次数
		for(int i=1;i<arr.length;i++) {
			//将0到arr.length-i之间的最大值,移动到arr.length-i位置
			for(int j=0;j<arr.length-i;j++) {
				//前一个数字大,则交换位置
				if(arr[j]>arr[j+1]) {
					temp=arr[j];
					arr[j]=arr[j+1];
					arr[j+1]=temp;
				}
			}
			//输出每一步的排序结果
			System.out.print("第"+i+"次的排序结果为:");
			for (int num : arr) {
				System.out.print(" "+num);//遍历输出当前的数组
			}
			System.out.println();//换行
		}
	}
	
	/**
	 * 选择排序
	 * @param arr 需排序的数组
	 */
	public void selectSort(int[] arr) {
		int temp,index;		
		//比较的首位置
		//找到从i到arr.length-1之间的最小值的下标
		for(int i=0;i<arr.length-1;i++) {
			//默认最小值为i位置
			index=i;
			for(int j=i+1;j<arr.length;j++) {
				//找到最小值得下标
				if(arr[j]<arr[index]) {
					index=j;
				}
			}
			//把找到的最小值跟i位置的数字互换位置
			temp=arr[index];
			arr[index]=arr[i];
			arr[i]=temp;
			
			//输出每一步的排序结果
			System.out.print("第"+(i+1)+"次的排序结果为:");
			for (int num : arr) {
				System.out.print(" "+num);//遍历输出当前的数组
			}
			System.out.println();//换行
		}
	}
	
	/**
	 * 插入排序
	 * @param arr 需排序的数组
	 */
	public void insertSort(int[] arr) {
		int temp;
		int per;//上一个下标	
		
		for(int i=1;i<arr.length;i++) {
			temp=arr[i];
			per=i-1;
			//当左边的值大于temp时,把这个已经比较过的值向右移动一位,再比较下一个坐标的值
			while(per>=0&&arr[per]>temp) {
				arr[per+1]=arr[per];
				per--;
			}
			//否则,找到temp位置per+1,插入进去
			arr[per+1]=temp;
			
			//输出每一步的排序结果
			System.out.print("第"+(i+1)+"次的排序结果为:");
			for (int num : arr) {
				System.out.print(" "+num);//遍历输出当前的数组
			}
			System.out.println();//换行
		}
	}
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值