氣泡排序法、選擇排序法、插入排序法
阿新 • • 發佈:2018-12-29
一貫作風,不說廢話,程式碼走起
先是測試程式碼:
@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();//換行 } }