三種排序方式
阿新 • • 發佈:2018-12-20
冒泡,選擇,插入排序
public class Buble { public static void main(String[] args) { //建立一維陣列 int[]arr={11,4,7,2,55,9}; System.out.println("氣泡排序後資料為"); bubble(arr); list(arr); System.out.println(); int[]arr1={3,6,1,98,7,66,2}; System.out.println("選擇排序後資料為"); select(arr1); list(arr1); System.out.println(); int[]arr2={11,32,1,3,76,8,56}; System.out.println("插入排序後資料為"); insert(arr2); list(arr2); } private static void insert(int[] arr2) { //外層控制輪 for(int i=0;i<arr2.length-1;i++){ //內層控制次數 for(int j=i+1;j>0;j--){ if(arr2[j]<arr2[j-1]){ change(j,j-1,arr2); }else{ break; } } } } private static void select(int[] arr1) { // 外層控制輪數 for (int i = 0; i < arr1.length-1; i++) { //內層控制次數 int t = i; for (int j = i+1; j < arr1.length; j++) { if(arr1[t]>arr1[j]){ t = j; } } if(t!=i){ change(t,i,arr1); } } } private static void list(int[] arr) { //遍歷陣列,輸出陣列 for (int i : arr) { System.out.print(i+" "); } } private static void bubble(int[] arr) { //外層控制輪數 for (int i = 0; i < arr.length-1; i++) { //內層控制次數 for (int j = 0; j < arr.length-1-i; j++) { if(arr[j]>arr[j+1]){ //兩個數位置互換 change(j,j+1,arr); } } } } private static void change(int i, int j, int[] arr) { // 交換兩個數的位置 int temp = arr[i]; arr[i] = arr[j]; arr[j] = temp; } }
總結
氣泡排序的思路
冒泡就像魚吐得泡泡一樣,泡泡越來越大,連起來看就是小泡泡在下面,大泡泡在上面。聯想到數字就是大的數字在上面,小的數在下面。給你一個串數字,根據氣泡排序的方法演示就是這樣的 假如有這樣的數字11,4,7,2,55,9。 第一次比較 : 4,7,2,11,9,55 就是兩個數兩兩比較 第二次比較 : 4,2,7,9,11 由於最大的數已經出來就不用比較最後一個了 第三次比較 : 2,4,7,9 第四次比較 : 2,4,7 第五次比較 : 2,4 第六次比較 : 2 其實最後一次就沒進入迴圈,因為一共6個數,前五個大的數都找出來了,自然而然最小的數也出來了。
選擇排序
選擇排序,就是先拿出一個數,假設是最小的數,一個一個的跟後面的數進行比較。找到最小的數,由於是在陣列中操作的。所以我們只需記住這個數的下標,當比較完畢,看看這個下標跟之前假設最小值的下標是否相等,不相等,讓他們兩個數進行交換。
插入法排序
插入法排序,先讓兩個數進行排序,當第三個數進來時,只需要跟第二個數比較,當它大於最二個數是,直接插入這個數的後面。當它小於第二個數時,依次跟前兩個數比較。後面的數也是這樣跟前面的數進行比較。 總的來說,後面兩種方法都是根據氣泡排序方法延伸而來,主要是考慮到效率問題,後面的方法相對於冒泡來說依次少比較了很多次。