氣泡排序 選擇排序 插入排序
阿新 • • 發佈:2021-10-31
排序
說明
簡單的說一下幾個排序,都是從左往右排序,從小到大,氣泡排序直接雙重for迴圈,選擇排序需要宣告minIndex,快速排序需要宣告num和j
1 氣泡排序
最基本的排序,牢記陣列長度為N,則判斷N>0後,使用雙層for迴圈,外層i<N-1,內層j<N-1-i,如果陣列[j]>陣列[j+1],則交換位置
public static int[] bubbleSort(int[] array){ if (array.length>0){ for (int i=0;i<array.length-1;i++){ for (int j=0 ;j<array.length-1-i;j++){ if (array[j]>array[j+1]){ int temp = array[j+1]; array[j+1]=array[j]; array[j]=temp; } } } } return array; }
2 選擇排序
最常用的排序,牢記陣列長度為N,則判斷N>0後,首先一層for迴圈,i<N,並且記錄本次迴圈i對應的陣列索引minIndex,預設其是當前位置向右看最小值的索引,即minIndex=i,然後第二層for迴圈,j從i開始,j<N,如果array[j]<array[minIndex]就記錄j為最小值索引,即minIndex=j,記憶體迴圈結束後令array[i]與array[minIndex]交換位置
public static int[] selectSort(int[] array){ if (array.length>0){ for (int i=0 ;i<array.length;i++){ int minIndex=i; for (int j=i;j<array.length;j++){ if (array[j]<array[minIndex]) { minIndex=j; } } int temp = array[i]; array[i]=array[minIndex]; array[minIndex]=temp; } } return array; }
3 插入排序
將整個佇列看成兩個區域,左邊是排好的,右邊是待排的,牢記陣列長度為N,令i從索引1開始,不斷從待排區域取值,因此i<N,每次取值時記錄該值num=array[i],再宣告j,令j=i-1,不斷從i-1開始往左取陣列的值,因此j≥0並且j--,當num<array[j]時,將排好的值往右移一個位置,這會讓array[i]被覆蓋,但是這個值已經被num存好,當發現array[j]<num,說明array[j+1]就是num要存放的位置,此時直接break跳出迴圈
public static int[] insertSort(int[] array){ if (array.length>0){ for (int i=1;i<array.length;i++){ int num = array[i]; int j; for (j = i-1;j>=0;j--){ if (num<array[j]){ array[j+1]=array[j]; }else{ break; } } array[j+1]=num; } } return array; }