几种常见的排序算法
昨天刷面经的时候发现这些基本的算法是面试中常见的问题,吓得我赶紧复习了一下。
1.冒泡排序
原理:从序列尾至头,依次比较两相邻的元素,小的元素左移(前移)大的元素右移(后移)经过 n-1 次起泡后,序列有序。
代码:
2.插入排序
原理:将序列第一个元素视为有序列,其余数视为无序列。从第 2 个数开始,逐个从无序列中取出插入到有序子列中...直至得到完全有序列。
代码:
3.快速排序
原理:以序列中某个元素 PK(通常是 r[0])为分界,将序列划分为两个子序列,左边的子序列都不大于 PK,右边的子序列都不小于 PK。然后对左、右子序列同时进行类似分割操作,直至子序列长度为 1 止,序列有序。
代码:
4.合并排序
原理:首先将序列的每个元素看成是长度为 1 的有序子序列。然后将这些有序自序列两两合并成长度是 2 的有序子序列,然后再两两合并...直至合并成长度是 n 的有序序列。
代码:
5.选择排序
原理:每次从右至左扫描序列,记下最小值的位置。
代码:
各种算法的复杂度:
内容有所借鉴,只是为了方便自己复习,巩固知识。