一、冒泡排序

1. 代码实现

  1. public class Main {
  2. public void bubbleSort(int[] arr) {
  3. // 外层表示循环次数,循环 length - 1次
  4. for (int i = 0; i < arr.length - 1; i++) {
  5. // 该轮是否排交换过的标志变量,若没改变,则表示没进行过交换,已经排好
  6. boolean swap = false;
  7. // 每一轮排序(外层),会将大的值排到数组末端, 所以内层每轮到的数组位置是越来越小(length - i - 1)
  8. for (int j = 0; j < arr.length - i - 1; j++) {
  9. if (arr[j] > arr[j + 1]) {
  10. swap = true;
  11. swapInt(arr, j, j + 1);
  12. }
  13. }
  14. if (!swap) {
  15. break;
  16. }
  17. }
  18. }
  19. }

2. 图理解

bubble_sort.svg

3. 参考

二、简单选择排序

1. 代码实现

  1. public void selectSort(int[] arr) {
  2. int len = arr.length;
  3. // 外层循环:i即可表示,如果产生小值要放入的位置。
  4. for (int i = 0; i < len; i++) {
  5. int value = arr[i];
  6. int position = i;
  7. // 选出小的值,记录小值的位置
  8. for (int j = i + 1; j < len; j++) {
  9. if (arr[j] < value) {
  10. value = arr[j];
  11. position = j;
  12. }
  13. }
  14. // 交换最小值和当前外层遍历的位置
  15. arr[position] = arr[i];
  16. arr[i] = value;
  17. }
  18. }

2. 图理解

02_select_sort.svg