【排序算法】图解算法——用眼睛学习算法
2017-05-21 22:20
162 查看
大家都知道的排序算法大概有冒泡排序、选择排序、快速排序这几种。
分享一种加深对算法理解的方法,看算法的实现过程结合算法的本质思想来理解算法,可以达到手写算法的实现效果。
可以看到整个过程是一直在做元素交换,到达将较大的元素排到队列右边的目标。
下面给出一个 java 的实现
先给出一个 java 的实现
然后我们一起来看看图解选择排序
使用这种方式来学习算法,无论是理解成本还是理解一个算法的深度我相信会比看文字描述来得好。
图解算法的网站:https://visualgo.net
分享一种加深对算法理解的方法,看算法的实现过程结合算法的本质思想来理解算法,可以达到手写算法的实现效果。
冒泡排序(Bubble Sort)
先来一起看一下经典排序算法冒泡排序,冒泡排序(Bubble Sort),首先看实现过程:可以看到整个过程是一直在做元素交换,到达将较大的元素排到队列右边的目标。
下面给出一个 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; } }
然后我们一起来看看图解选择排序
使用这种方式来学习算法,无论是理解成本还是理解一个算法的深度我相信会比看文字描述来得好。
图解算法的网站:https://visualgo.net
相关文章推荐
- 算法学习-排序算法-快速排序
- STL学习笔记----14.STL算法之 (排序算法)
- 韩顺平_PHP程序员玩转算法公开课(第一季)10_使用栈完成高级计算器(2)_学习笔记_源代码图解_PPT文档整理
- 算法学习系列之二章---KMP算法图解
- 算法学习小心得——基于比较的排序算法汇总
- 算法导论之排序算法学习
- 算法学习----各种排序算法的实现和对比2
- 韩顺平_PHP程序员玩转算法公开课(第一季)12_双向链表crud操作之_水浒英雄排行_学习笔记_源代码图解_PPT文档整理
- Camshift算法学习笔记之一图解千愁
- 韩顺平_PHP程序员玩转算法公开课(第一季)09_使用栈完成高级计算器(1)_学习笔记_源代码图解_PPT文档整理
- 算法学习一之常见的七大排序算法
- 韩顺平_PHP程序员玩转算法公开课(第一季)02_单链表在内存中存在形式剖析_学习笔记_源代码图解_PPT文档整理
- 韩顺平_PHP程序员玩转算法公开课_学习笔记_源代码图解_PPT文档整理_目录
- 韩顺平_PHP程序员玩转算法公开课(第一季)11_双向链表在内存中存在形式剖析_学习笔记_源代码图解_PPT文档整理
- 韩顺平_PHP程序员玩转算法公开课(第一季)06_堆栈在内存中存在形式剖析_学习笔记_源代码图解_PPT文档整理
- C#数据结构和算法学习系列四----基础排序算法
- 韩顺平_PHP程序员玩转算法公开课(第一季)01_算法重要性_五子棋算法_汉诺塔_回溯算法_学习笔记_源代码图解_PPT文档整理
- 韩顺平_PHP程序员玩转算法公开课(第一季)04_阶段性答疑解惑_学习笔记_源代码图解_PPT文档整理
- 算法设计和数据结构学习_1(常见排序算法思想)
- 算法学习----各种排序算法的实现和对比1