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

Posted yige_

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了基本排序算法的一些零碎补充相关的知识,希望对你有一定的参考价值。

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

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

以上是关于基本排序算法的一些零碎补充的主要内容,如果未能解决你的问题,请参考以下文章

7种基本排序算法的Java实现

十大经典排序算法

Java排序算法 - 堆排序的代码

一些命令的补充

内排序算法的整理

Python的零碎的补充知识