1. 程式人生 > >氣泡排序法、選擇排序法、插入排序法

氣泡排序法、選擇排序法、插入排序法

一貫作風,不說廢話,程式碼走起

先是測試程式碼:

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