![9c390dcb284f2b256ff3a3470250dc80.png](https://i-blog.csdnimg.cn/blog_migrate/e04c2fdb480000481f161de0aa1fa827.jpeg)
一、算法的分类
![be0d66920a3eb01c0810359663c6575b.png](https://i-blog.csdnimg.cn/blog_migrate/c64f5ab175c7d1eeede67f8a59ab6fe0.jpeg)
二、术语说明
稳定:如果a原本在b前面,而a=b,排序之后a仍然在b的前面;
不稳定:如果a原本在b的前面,而a=b,排序之后a可能会出现在b的后面;
内排序:所有排序操作都在内存中完成;
外排序:由于数据太大,因此把数据放在磁盘中,而排序通过磁盘和内存的数据传输才能进行;
时间复杂度: 一个算法执行所耗费的时间;
空间复杂度:运行完一个程序所需内存的大小;
三、时间复杂度
![57c4a7bf6cfe21ca44a4d6692f91f4eb.png](https://i-blog.csdnimg.cn/blog_migrate/4c7a3e5652c619681ae8ed630101afbc.jpeg)
四、交换排序
1、冒泡排序
冒泡排序是一种简单的排序算法。它会遍历若干次要排序的数列,每次遍历时,它都会从前往后依次比较相邻两个数的大小;如果前者比后者大,则交换它们的位置。这样,一次遍历之后,最大的元素就在数列的末尾! 采用相同的方法再次遍历时,第二大的元素就被排列在最大元素之前。重复此操作,直到整个数列都有序为止。
算法描述
- 比较相邻的元素。如果第一个比第二个大,就交换它们两个;
- 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对,这样在最后的元素就是最大的数;
- 针对所有的元素重复以上的步骤,除了最后一个;
- 重复步骤1~3,直到排序完成。
静态图演示
![51ad1de3c69e8395bc78ca2798ad9492.png](https://i-blog.csdnimg.cn/blog_migrate/1573ed421ad1b228eb928c86de187f34.jpeg)
动态图演示
![v2-8897e62544e274bb1950aa63770ca2e7_b.gif](http://img-03.proxy.5ce.com/view/image?&type=2&guid=707312bf-bb60-eb11-8da9-e4434bdf6706&url=https://pic4.zhimg.com/v2-8897e62544e274bb1950aa63770ca2e7_b.gif)
冒泡排序算法分析
最佳情况:T(n) = O(n) 最差情况:T(n) = O(n2) 平均情况:T(n) = O(n2)
2、快速排序
快速排序(Quick Sort)使用分治法策略。
它的基本思想是:在数据序列中选择一个元素作为基准值,每次从数据序列的两端开始交替进行,将小于基准值元素交换到序列前端,将大于基准值的元素交换到序列后端,介于两者之间的位置则成为基准值的最终位置。同时,序列被划分成两个子序列,再分别对两个子序列进行快速排序,直到子序列长度为1,则完成排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。
静态图展示