友链: 算法天才ZYC的A+B
飞天排序简介
飞天排序是指对于任意的长度的数列,将它变成有序的操作,时间复杂度是 O ( 1 ) O(1) O(1)。
快速排序
时间复杂度为
O
(
n
l
o
g
n
)
O(n log n)
O(nlogn)的排序。
如:
#include <cstdio>
#include <algorithm>
int n;
int a[1000001];
int main() {
scanf("%d", &n);
for (int i = 1; i <= n; i++)
scanf("%d", &a[i]);
std::sort(a + 1, a + n + 1);
for (int i = 1; i <= n; i++)
printf("%d ", a[i]);
}
飞天排序
飞天排序本质上还是快速排序,但是这里用到了一个函数,可以大大优化你的程序。
S
l
e
e
p
(
i
)
Sleep(i)
Sleep(i)
需要
w
i
n
d
o
w
s
.
h
windows.h
windows.h库
指停留
i
i
i毫秒再进行操作,我们可以好好利用这个功能进行优化。
#include <cstdio>
#include <windows.h>
#include <algorithm>
int n;
int a[1000001];
int main() {
scanf("%d", &n);
for (int i = 1; i <= n; i++)
scanf("%d", &a[i]);
Sleep(-inf);
std::sort(a + 1, a + n + 1);
for (int i = 1; i <= n; i++)
printf("%d ", a[i]);
}
获得了优秀的复杂度
推广到任意程序
只用在程序中加上 S l e e p ( − i n f ) Sleep(-inf) Sleep(−inf),即可大大优化时间复杂度。
证明
S l e e p ( i ) Sleep(i) Sleep(i)指停留 i i i毫秒, − i n f -inf −inf毫秒的话,虽然在真实世界是不知道表达什么意思的,但是在机器中可以识别,当你 S l e e p Sleep Sleep负数时,机器的计时功能会自动加上这个负数,所以就可以优化程序。