Java 数据结构 - 排序

冒泡排序

思想:

  1. N 个元素需要排序 N-1 趟, 每趟比较相邻的两个元素,如果前一个元素和后一个元素不满足大小顺序规则,则交换位置,这样一趟下来,一趟中的最大(最小)的元素就 “沉” 到最后面的位置。
  2. 执行 M 趟排序后,整个元素序列中的最后面的 M 个元素就排好顺序了,剩下就只需要将前面的 N-M 个元素排好序即可。
private void sortBubble(int[] arr) {
        // 需要比较的趟数 N-1
        for (int i = 0; i < arr.length - 1; i++) {
           // 每趟中比较前面的 N-M 个相邻的两个元素,不满足就交换位置,这样最大或最小的就沉到最后面位置
            for (int j = 0; j < arr.length - 1 - i; j++) {
                if (arr[j + 1] < arr[j]) {
                    int temp = arr[j];
                    arr[j] = arr[j + 1];
                    arr[j + 1] = temp;
                }
            }
        }
    }

选择排序

思想:

  1. N 个元素需要排序 N-1 趟,每趟中找到最大(小)值,放在待排序序列中的第一个位置,这样一趟下来,最大值或最小值就放在最前面
  2. 执行 M 趟排序后,整个元素序列中的最前面的 M 个元素就排好顺序了,剩下就只需要将后面的 N-M 个元素排好序即可
private void sortSelect(int[] arr) {
        // N 个元素需要排 N-1 趟,每趟中找出最大或最小值,
        for (int i = 0; i < arr.length - 1; i++) {
            // 将待排序序列中第一个元素先假定为最大(小)值
            int min = i;
            for (int j = i; j < arr.length - i; j++) {
                // 如果一趟下来,有比第一个元素大或小元素,则将最小下标设定该下标
                if (arr[j] < arr[min]) {
                    min = j;   //重点在这,最小值下标将会被 次小值下标 替换
                }
            }
            // 交换位置
            if (min != i) {
                int temp = arr[min];
                arr[min] = arr[i];
                arr[i] = temp;
            }
        }
    }

插入排序

思想:

  1. 整个序列分为:已经排好序的序列和待排序的序列,每趟从待排序序列中取出第一个元素,插入到已经排好序的序列合适的位置
  2. 将插入位置的后面元素依次往后移动位置。

    private void sortInsert(int[] arr) {
        for (int i = 1; i < arr.length; i++) {
            // 待排序序列的第一个元素
            int temp = arr[i];
            int j = i - 1;
            // 待排序元素插入到已排好序序列中的合适位置
            while (j > 0 && temp < arr[j]) {
                arr[j + 1] = arr[j];  // 依次往后移动一个位置
                j--;
            }
            arr[j + 1] = temp;
        }
    }

猜你喜欢

转载自blog.csdn.net/xingxtao/article/details/79831393
今日推荐