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

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

先是测试代码:

	@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();//换行
		}
	}

猜你喜欢

转载自blog.csdn.net/qq_43566496/article/details/84335993