简单选择排序和堆排序
最近在全面学习数据结构,常用算法记录:简单选择排序和堆排序,简单选择排序的基本思想是每一趟在待排序元素中选取关键字最小的元素加入有序子序列,直到所有元素有序,总共进行 $n-1$ 趟。 堆排序的基本思想见文末图片。 简单选择排序为不稳定排序。 堆排序为不稳定排序。 简单选择排序时间复杂度: 时间复杂度:$O(n^2)$...
标签文章 16 篇
最近在全面学习数据结构,常用算法记录:简单选择排序和堆排序,简单选择排序的基本思想是每一趟在待排序元素中选取关键字最小的元素加入有序子序列,直到所有元素有序,总共进行 $n-1$ 趟。 堆排序的基本思想见文末图片。 简单选择排序为不稳定排序。 堆排序为不稳定排序。 简单选择排序时间复杂度: 时间复杂度:$O(n^2)$...
最近在全面学习数据结构,常用算法记录:希尔排序,基本思想是选定一个增量 $d<n$,将元素按此增量分组(所有相距 $d$ 的元素为一组),然后在各个子序列内进行插入排序,完成后缩小增量 $d'(d'<d)$,如此反复操作,直到增量 $d = 1$ 为止,此时就成了标准的插入排序,但此时大部分元素已经有序,只需要少量操作...
最近在全面学习数据结构,常用算法记录:插入排序,基本思想是将待排序的记录按其关键字的大小逐个插入到一个有序序列(通常为左半部分),直到所有记录插入完成,是一种稳定排序。 空间复杂度:$O(1)$ 平均时间复杂度:$O(n^2)$
最近在全面学习数据结构,常用算法记录:快速排序,即交换排序的一种,是对冒泡排序的一种改进,是一种不稳定排序。 平均时间复杂度:$O(nlogn)$ 最坏时间复杂度(退化至冒泡排序):$O(n^2)$
输入一个长度为 $n$ 的整数数列,从小到大输出前 $m$ 小的数。 输入格式 第一行包含整数 $n$ 和 $m$。 第二行包含 $n$ 个整数,表示整数数列。 输出格式 共一行,包含 $m$ 个整数,表示整数数列中前 $m$ 小的数。 数据范围 $\rm{1} \le m \le n \le {10^5}$ $\rm...
给定一个包含 $n$ 个点(编号为 $\rm{1} \sim {\rm{n}}$ )的无向图,初始时图中没有边。 现在要进行 $m$ 个操作,操作共有三种: “C a b”,在点 $a$ 和点 $b$ 之间连成一条边,$a$ 和 $b$ 可能相等; “Q1 a b”,询问点 $a$ 和点 $b$ 是否在同一连通块中,$...
一共有 $n$ 个数,编号是 $\rm{1} \sim n$,最开始每个数各自在一个集合中。 现在要进行 $m$ 个操作,操作共有两种: “M a b”,将编号为 $a$ 和 $b$ 的两个数所在的集合合并,如果两个数已经在一个集合中,则忽略这个操作; “Q a b”,询问编号为 $a$ 和 $b$ 的两个数是否在同一...
维护一个字符串集合,支持两种操作: “I x”向集合中插入一个字符串 $x$; “Q x”询问一个字符串在集合中出现了多少次。 共有 $N$ 个操作,输入的字符串总长度不超过 $\rm{10^5}$,字符串仅包含小写英文字母。 输入格式 第一行包含整数 $N$,表示操作数。 接下来 $N$ 行,每行包含一个操作指令,指...
给定一个模式串 $S$,以及一个模板串 $P$,所有字符串中只包含大小写英文字母以及阿拉伯数字。 模板串 $P$ 在模式串 $S$ 中多次作为字串出现。 求出模板串 $P$ 在模式串 $S$ 中所有出现的位置的起始下标。 输入格式 第一行输出整数 $N$,表示字符串 $P$ 的长度。 第二行输入字符串 $P$。 第三行...
给定一个大小为 $n \le 10^6$ 的数组。 有一个大小为 $k$ 的滑动窗口,它从数组的最左边移动到最右边。 你只能在窗口中看到 $k$ 个数字。 每次滑动窗口向右移动一个位置。 以下是一个例子: 该数组为 $\left\{ {1,3, - 1, - 3,5,3,6,7} \right\}$,$k$ 为 $\r...