【图解算法】排序算法——冒泡排序、选择排序

大家都知道的排序算法大概有冒泡排序、选择排序、快速排序这几种。

分享一种加深对算法理解的方法,看算法的实现过程结合算法的本质思想来理解算法,可以达到手写算法的实现效果。

冒泡排序(Bubble Sort)

先来一起看一下经典排序算法冒泡排序,冒泡排序(Bubble Sort),首先看实现过程:

【图解算法】排序算法——冒泡排序、选择排序_第1张图片

可以看到整个过程是一直在做元素交换,到达将较大的元素排到队列右边的目标。
下面给出一个 java 的实现

    //冒泡排序
    private static void f3(int[] arr) {
        for (int i = 0; i < arr.length; i++) {
            for (int j = 0; j < arr.length-1; j++) {
                //将整个队列中相邻的元素做比较,将较小的元素和较大的元素交换位置
                if(arr[j+1] < arr[j]){
                    int temp = arr[j];
                    arr[j] = arr[j+1];
                    arr[j+1] = temp;
                }
            }
        }
    }

选择排序(Selection sort)

再来看一下选择排序算法,这个算法从名字可以看出来的意思是从序列中选择出最小的数放在队列头,或者将最大的数放在队列尾也是一样的道理。

先给出一个 java 的实现

//选择排序
    private static void f2(int[] arr) {
        int min ,pos;//min保存未排序序列中最小值,pos记录未排序序列中最小值的下标
        for (int i = 0; i < arr.length; i++) {
            min = arr[i];
            pos = i;
            for (int j = i+1; j < arr.length; j++) {
                //每次遍历未排序序列和当前最小值对比
                if(arr[j] < min){
                    min = arr[j];
                    pos = j;
                } 
            }
            //将未排序序列中最小的值丢到已排序序列队尾
            int temp = arr[i];
            arr[i] = min;
            arr[pos] = temp;
        }
    }

然后我们一起来看看图解选择排序

【图解算法】排序算法——冒泡排序、选择排序_第2张图片

使用这种方式来学习算法,无论是理解成本还是理解一个算法的深度我相信会比看文字描述来得好。

图解算法目录

【图解算法】排序算法——冒泡排序、选择排序

【图解算法】排序算法——插入排序

【图解算法】排序算法——归并排序

【图解算法】排序算法——快速排序

【图解算法】Java GC算法

【图解算法】排序算法——堆排序

【图解算法】并查集 —— 联合查找算法

【图解算法】排序算法——计数排序

Gif Power By https://visualgo.net

你可能感兴趣的:(算法,图解算法)