排序算法-冒泡排序和选择排序

15,676 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第1天,点击查看活动详情

排序算法

1、基本介绍

排序算法比较基础,但是设计到很多计算机科学的想法,如下:

  1. 比较和非比较的策略
  2. 迭代和递归的实现
  3. 分而治之思想
  4. 最佳、最差、平均情况时间复杂度分析
  5. 随机算法

2、排序算法的分类

算法分类

1.jpg

算法总结

2.jpg

3、冒泡排序

(1)冒泡排序的介绍

冒泡排序是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。

(2)冒泡排序的原理:

  1. 如果元素大小关系不正确,交换这两个数(在本例中为a> b),

  2. 比较一对相邻元素(a,b),

  3. 重复步骤1和2,直到我们到达数组的末尾(最后一对是第(N-2)和(N-1)项,因为我们的数组从零开始)

  4. 到目前为止,最大的元素将在最后的位置。 然后我们将N减少1,并重复步骤1,直到N = 1。

(3)动图演示

3.jpg

(4)代码演示

public static void bubbleSort(int array[]) {
        int t = 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]) {
                    t = array[j];
                    array[j] = array[j + 1];
                    array[j + 1] = t;
                }
            }
        }
    }

4、选择排序

(1)选择排序的介绍

选择排序(Selection-sort)是一种简单直观的排序算法。它的工作原理:首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。

(2)选择排序的原理

  1. [L ... N-1] 范围内找出最小项目 X 的位置,

  2. 用第 L 项交换X,

  3. 将下限 L 增加1并重复步骤1直到 L = N-2

(3)动态图演示

4.jpg

(4)代码演示

public static void selectionSort(int[] array) {
        for (int i = 0; i < array.length; i++) {
            int index = i;
            for (int j = i; j < array.length; j++) {
                if (array[j] < array[index]) 
                    index = j; 
            }
            int temp = array[index];
            array[index] = array[i];
            array[i] = temp;
        }
    }