搜索结果
Powered by: Simple-Jekyll-Search
其实是头两天看到一个视频,介绍了计算机领域的好几种排序算法,心血来潮准备好好学一下
由于原视频的排序算法众多,且不少算法不仅难而且少见,所以可以预见的是,这又将会是个大坑,需要很长时间填…
给大家整个活,祝大家每天都能睡个好觉。
sleep
,所以这种排序方法被称为“睡觉排序”。以下是使用
C
、Python
和JavaScript
的代码实现:
#include <stdio.h>
#include <pthread.h>
#include <windows.h>
void sleepSortThread(int num) {
Sleep(num);
printf("%d\n", num);
}
void sleepSort(int *nums, int size) {
pthread_t *threads = (pthread_t *) malloc(size * sizeof(pthread_t));
for (int i = 0; i < size; i++) // 初始化线程和数值
pthread_create(&threads[i], NULL, (void *(*)(void *)) sleepSortThread, (void *) nums[i]);
for (int i = 0; i < size; i++) // 等待线程结束
pthread_join(threads[i], NULL);
free(threads); // 释放内存
}
int main() {
int size = 10;
int nums[size];
for (int i = 0; i < size; i++)
nums[i] = rand() % 100;
sleepSort(nums, size);
return 0;
}
from time import sleep
from threading import Thread
from typing import List
import random
def sleepSort(nums: List[int]):
for num in nums:
t = Thread(target=lambda num: (sleep(num * 0.001), print(num)), args=(num,)) # 创建线程
t.start() # 启动线程
sleepSort(random.sample(range(0, 100), k=10))
async function sleepSort(nums) {
await Promise.all(nums.map(async (num) => { // 创建线程
await new Promise(handler => setTimeout(handler, num));
console.log(num);
}));
}
sleepSort(Array.from({ length: 10 }, () => Math.floor(Math.random() * 100)))
C语言的效率优势并不明显,不知道是不是我的写法有问题
编程语言 | 执行时间 | 输出结果 |
---|---|---|
C | 103ms | |
Python | 126ms | |
JavaScript | 136ms |
其实这个排序算法比上一个更加生草
以下是使用
Python
和JavaScript
的代码实现:
from typing import List
import os
import random
def fileSort(nums: List[int]):
if not os.path.exists("temp"):
os.mkdir("temp")
fileLength = len(str(max(nums))) # 获取最大值的长度,以保持文件名长度一致
for i in nums: # 创建文件
open("temp/" + str(i).zfill(fileLength), "w").close()
for i in os.listdir("temp"):
print(i)
os.remove("temp/" + i)
fileSort(random.sample(range(0, 100), k=10))
const fs = require('fs');
const path = require('path');
function fileSort(nums) {
const temp = path.join(__dirname, 'temp');
if (!fs.existsSync(temp)) fs.mkdirSync(temp);
const fileLength = Math.max(...nums).toString().length; // 获取最大值的长度,以保持文件名长度一致
nums.forEach(num => { // 创建空文件
fs.closeSync(fs.openSync(path.join(temp, num.toString().padStart(fileLength, '0')), 'w'));
});
fs.readdirSync(temp).forEach(file => { // 输出结果并删除文件
console.log(file);
fs.unlinkSync(path.join(temp, file));
});
}
fileSort(Array.from({ length: 10 }, () => Math.floor(Math.random() * 100)));
虽然都是整活的排序算法,但这个排序算法的效率还是比睡觉排序明显高不少的,就是有点耗硬盘寿命。
编程语言 | 执行时间 | 输出结果 |
---|---|---|
Python | 69ms | |
JavaScript | 50ms |