浅谈O(1)飞天排序及Sleep函数对程序的优化

友链: 算法天才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负数时,机器的计时功能会自动加上这个负数,所以就可以优化程序。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值