排序演算法--Java實現
阿新 • • 發佈:2020-11-14
排序演算法
其中的程式碼如果有問題或者有更好的解法,望各位不吝賜教!
氣泡排序
原理:以一個整數陣列為例,排序核心是每次比較相鄰兩個元素的大小,這樣一次迴圈可以將一個最大或最小的元素放到陣列頭或陣列尾,直到沒有元素被移動演算法結束
步驟(按從小到大排序):
- 遍歷陣列,比較相鄰兩個元素,如果
prev>next
,那麼交換兩個元素 - 遍歷完之後判斷是否有元素被移動
- 被移動-->返回步驟1
- 無移動-->步驟3
- 退出演算法
程式碼實現:
public class BubbleSort { public static void main(String[] args) { final long SEED = -26443L; final int[] unSortArray = new int[10]; Random random = new Random(); random.setSeed(SEED); for (int i = 0; i < 10; ++i) { unSortArray[i] = Math.abs(random.nextInt() % 100); } // [77, 67, 8, 2, 88, 95, 75, 14, 41, 75] System.out.println(Arrays.toString(unSortArray)); bubbleSort(unSortArray); // [2, 8, 14, 41, 67, 75, 75, 77, 88, 95] System.out.println(Arrays.toString(unSortArray)); } static void bubbleSort(int[] arr) { if (arr.length < 2) { return; } // 記錄元素移動次數 int count; while (true) { count = 0; for (int i = 0; i < arr.length - 1; i++) { if (arr[i] > arr[i + 1]) { swap(arr, i, i + 1); count++; } } if (count == 0) { return; } } } static void swap(int[] arr, int idx, int oIdx) { int temp = arr[idx]; arr[idx] = arr[oIdx]; arr[oIdx] = temp; } }