排序整理

355 阅读2分钟

1 冒泡排序-O(f(n)) = O(n^2)

1.1 概述:

每一趟/轮都要比较n-1次,第一个与第二个比,第二个与第三个比…… 两层循环,外层用于遍历每一个数(拿出来待比较),内层循环用于比较。

1.2 基本思路:

  1. 外循环是遍历每个元素,每次都放置好一个元素;   
  2. 内循环是比较相邻的两个元素,把大的元素交换到后面;
  3. 等到第一步中循环好了以后也就说明全部元素排序好了;

1.3 代码实现:

2 选择排序-O(f(n)) = O(n^2)

1.1 概述:

(SelectSort)是一种原地(in-place)排序算法,适用于小文件。选择排序是基于键值并且交换是发生在需要交换时才执行,所以选择排序常用于数值较大和键值较小文件。

1.2 基本思路:

  1. 外循环:遍历每个位置(其实就是先选定某个位置a,然后用内循环去遍历这个位置(a)后面的位置的元素b,接着拿后面这个位置的元素(b)与定下来的那个位置上的元素(a)作比较,按照一定的顺序规则确定是否要交换位置。依此循环);
  2. 内循环:在无序元素中选择一个合适的数;
  3. 把第二步选中的数据放到第一步选中的位置上就可以了;

1.3 代码实现:

3 插入排序-O(f(n)) = O(n^2)

1.1 概述:

(InsertionSort)是一种简单且有效的比较排序算法,在每次迭代过程中算法随机的从输入序列中移除一个元素,并将该元素插入到排序序列中正确的位置,重复该过程,直到所有元素都被选择一次。(遍历每个数据并找到它该在的位置)

现在抓到一张7,把它和手里的牌从右到左(从左到右也可以,我就从右到左插牌的)依次比较,7比10小,好,应该往左插,7比5大,好,就插这里。

1.2 基本思路:

4 希尔排序-O(f(n)) = O(n^2)

1.1 概述:

(ShellSort)又称缩小增量排序,该算法是一个泛化的插入排序。

1.2 基本思路:

1.3 算法实现:

5 堆排序:O(f(n)) = O(n log n).

6 合并排序:O(f(n)) = O(n log n).

7 自然合并排序:O(f(n)) = O(n).

8 快速排序:O(f(n)) = O(n log n).

To Be Continued……