基本排序算法的一些零碎补充


做题被卡了,原来还是因为基础不扎实。

  1. 冒泡排序:排序时,比较相邻的两个元素是其特点;
  2. 冒泡排序和插入排序稳定,而选择排序不稳定;
    image
  3. 以下这段代码被我误认为是冒泡排序的一种写法,其实它是选择排序的一种写法。因为它并不总是进行相邻两个元素的比较,而且每当第二重循环结束,a[i]存着的都是a[i~n]的最大值。
    image
  4. 不稳定的排序算法当然可以被改造成稳定的,代价是牺牲时间和空间效率。比如下面这个是选择排序的一种稳定写法
#include
int n,a[1005],b[1005],sign[1005];
int main() {
	std::cin>>n;
	for(int i=1; i<=n; i++)
		std::cin>>a[i];
	for(int i=1; i<=n; i++) {
		int min=2147483647,pos=0;
		for(int j=1; j<=n; j++) {
			if(!sign[j]&&a[j]