见过的最扯的排序算法
别的地方看过,感觉挺好玩,转之public class SleepSort {
public static void main(String[] args) {
int[] ints = {1,4,7,3,8,9,2,6,5};
SortThread[] sortThreads = new SortThread[ints.length];
for (int i = 0; i < sortThreads.length; i++) {
sortThreads[i] = new SortThread(ints[i]);
}
for (int i = 0; i < sortThreads.length; i++) {
sortThreads[i].start();
}
}
}
class SortThread extends Thread{
int ms = 0;
public SortThread(int ms){
this.ms = ms;
}
public void run(){
try {
sleep(ms*10+10);
} catch (InterruptedException e) { // TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(ms);
}
}
还有JavaScript版的,比较短:
function sleepsort() {
for (var i = 0, il = arguments.length; i < il; i++) {
(function(args, index) {
setTimeout(function() {
document.body.innerHTML += args[index] + ', ';
}, args[index]);
}(arguments, i));
}
};
不解释,BH的程序不需要理由……
--------------------编程问答-------------------- 哈哈哈哈,笑翻我了 --------------------编程问答-------------------- 天才,绝对是天才 --------------------编程问答--------------------
#!/bin/bash
function f() {
sleep "$1"
echo "$1"
}
while [ -n "$1" ]
do
f "$1" &
shift
done
wait
整個是linux下的腳本。。。。。。。 --------------------编程问答-------------------- --------------------编程问答-------------------- 这算法,。。。真慢。。。 --------------------编程问答-------------------- 很新颖啊。。我勒哥神 --------------------编程问答-------------------- 这个太强 必须顶啊 = = --------------------编程问答-------------------- 何等的易做图啊... --------------------编程问答-------------------- 想法好啊,小的数停顿时间肯定快结束,自动就升序排列了 --------------------编程问答-------------------- 不好意思.我是菜鸟.sortThreads[i].start();这句是什么意思? --------------------编程问答-------------------- 佩服的五体投地,四脚朝天! --------------------编程问答-------------------- 哈哈 这个可以有!!!
存在既合理
支持一下!! --------------------编程问答-------------------- 长见识了 --------------------编程问答--------------------
启动线程
再进来顶一下 这神般的意识啊 --------------------编程问答-------------------- 看了几遍才反应过来,这思路可谓是别出心裁,太TM有才了 --------------------编程问答-------------------- 挺有创意的 --------------------编程问答-------------------- Wouldn’t work if the thread doesn’t start very close to each other.
you can't ensure each thread start in a very short time. --------------------编程问答-------------------- 真的是我的神啊…… --------------------编程问答-------------------- 功能已经实现。只是慢了一些,呵呵 --------------------编程问答-------------------- 有意思,这样电脑就不智能了,倒还没有人算得快了,呵呵 --------------------编程问答-------------------- 很有意思。。。 --------------------编程问答-------------------- 淡定 --------------------编程问答-------------------- 我就看看 --------------------编程问答-------------------- 不解释。。。。。。。。。。 --------------------编程问答-------------------- --------------------编程问答-------------------- 很早就说了,这之算法是有bug的 --------------------编程问答-------------------- 这样也行啊 --------------------编程问答-------------------- 牛逼啊。。。 --------------------编程问答-------------------- gsasdggsag --------------------编程问答-------------------- gfsdgfsdagasgs --------------------编程问答--------------------
哈哈,要是我,我就输入:10000,1
等阿等。。。。。。 --------------------编程问答-------------------- 这位哥,我只能膜拜 --------------------编程问答-------------------- 的确很扯.. --------------------编程问答-------------------- 果然是能人辈出 --------------------编程问答-------------------- 扯淡,排大数的话 估计是史上最慢排序算法,不过有创意呵 --------------------编程问答-------------------- 有意思,但这样只能从小到大排序,从大到小就没办法了吧? --------------------编程问答-------------------- 很有意思。。 --------------------编程问答-------------------- 呵呵,看看即可 --------------------编程问答-------------------- 别出心裁啊 --------------------编程问答-------------------- 看不懂啊 --------------------编程问答-------------------- 这个有问题,运行的结果有可能不正确.
多线程,你永远不知道那个线程在执行,那个线程将会执行 --------------------编程问答--------------------
不是有可能,哈哈,我运行了N次,没有一次是正确的,哈哈,我佩服的五体投地哪,这算法无敌了。 --------------------编程问答-------------------- 这个想法很牛,只是结果可能是错的。 --------------------编程问答-------------------- mark --------------------编程问答-------------------- 创意!!本来就不为了正确的,别管结果! --------------------编程问答-------------------- 这个想法很牛,只是结果可能是错的。呵呵 --------------------编程问答-------------------- 学习了 --------------------编程问答-------------------- 这样只能输出,不能排序.而且sleep线程只是挂起一段时间,挂起结束并不代表立刻执行.而且线程启动也是时间间隔的,所以不能保证顺序 --------------------编程问答-------------------- wa wa 哇 --------------------编程问答-------------------- 我在想,如果是100000,100000001,20000000000000,这样的数字排序时会是什么效果 --------------------编程问答-------------------- 有人能写成C的么... 完全看不懂 java 和shell = = --------------------编程问答-------------------- 还不如一百个闹钟,把时间都校对好。等着它闹铃。 --------------------编程问答-------------------- 有个问题 数很多之后, 后面的数也许比较小,但是因为for循环循环到它的时候时间已经过去不少了,比它大的数都已经出现了。。。。。。。。 --------------------编程问答--------------------
就是对N个数排序,开N个线程,每个线程SLEEP该数的时间,然后输出。 --------------------编程问答-------------------- java应该使用 ExecutorService 实现 --------------------编程问答-------------------- 我看不懂诶``````确实还没怎么用到线程 --------------------编程问答-------------------- C语言版的来了
--------------------编程问答-------------------- 这是大部分人的工作方法,随处可见,何止是排序 --------------------编程问答-------------------- --------------------编程问答--------------------
#include <pthread.h>
#include <stdio.h>
#define NUM_THREADS 9
void * SortThreadFunc(void *threadid)
{
int ms;
ms = (int)threadid;
sleep(ms*10+10);
sprintf("%d", ms);
pthread_exit(NULL);
}
int main (int argc, char *argv[])
{
pthread_t threads[NUM_THREADS];
int ints[] = {1,4,7,3,8,9,2,6,5};
int rc;
long t;
for(t=0; t<NUM_THREADS; t++){
rc = pthread_create(&threads[t], NULL, SortThreadFunc, (void *)ints[t]);
if (rc){
printf("ERROR; return code from pthread_create() is %d\n", rc);
exit(-1);
}
}
pthread_exit(NULL);
}
int[] ints = new int[] { 1, 4, 7, 3, 8, 9, 2, 6, 5 };
foreach (int i in ints)
{
new Thread(new ThreadStart(delegate() {
Thread.Sleep(i);
Console.WriteLine(i.ToString());
})).Start();
}
来个C#版~~哈哈~~!!! --------------------编程问答-------------------- 如果每次都对也就不说了,正确率15%。 --------------------编程问答-------------------- 算法有误,不正确 --------------------编程问答-------------------- 比如:int[] ints = {1001,1007,1003,1009,1002};
每次结果都不一样 --------------------编程问答-------------------- "最扯"
扯的是想法~!正确与否就不必去追究了!!!! --------------------编程问答-------------------- 杀鸡焉用牛刀 线程都赶上了? --------------------编程问答--------------------
为什么我每次的结果都一样??? --------------------编程问答--------------------
--------------------编程问答-------------------- 牛人哪都有这里特别多 --------------------编程问答-------------------- 写了个PHP版的
/* WIN32 API Version */
DWORD WINAPI SleepSortThreadProc(LPVOID lParam)
{
int ms = *((int*)lParam);
Sleep(ms*10+10);
_tprintf(TEXT("%d\n"), ms);
}
int _tmain(void)
{
int ints[] = {1,4,7,3,8,9,2,6,5};
HANDLE hSleepSortThread[] = new HANDLE[_countof(ints)];
int i;
for (i=0; i<_countof(ints); i++) {
hSleepSortThread[i] = CreateThread(NULL, 0, SleepSortThreadProc, ints+i, CREATE_SUSPENDED, NULL);
}
for (i=0; i<_countof(ints); i++) {
ResumeThread(hSleepSortThread[i]);
}
delete[] hSleepSortThread;
return 0;
}
--------------------编程问答-------------------- 想法不错!哈哈 --------------------编程问答-------------------- BH的程序 --------------------编程问答-------------------- 上面的同学何必那么较真呢,难道你们不觉得很有才嘛
<?php
define('INTERVAL', 100000);
function sleepsort($array) {
foreach($array as $e) {
if(!pcntl_fork()) {
usleep($e * INTERVAL);
echo $e . ' ';
exit;
}
}
usleep(max($array) * INTERVAL);
echo chr(10);
}
$datas = array(2, 3, 2, 2, 3, 4, 2, 3, 4, 5, 8, 1, 2, 9, 3);
echo json_encode($datas) . chr(10);
sleepsort($datas);
?>
哈哈哈,笑死我了 --------------------编程问答-------------------- 要么是天才,要么是易做图。不过我更相信他是无聊。都是寂寞惹得祸! --------------------编程问答-------------------- 强贴留名。 --------------------编程问答--------------------
这是人才啊!!!! --------------------编程问答-------------------- 鬼才啊!!! --------------------编程问答-------------------- 楼主在哪里见到的,简直是神作呀! --------------------编程问答-------------------- 顶起,想法很有创意,JAVA要的就是这种思想,何必那么在意结果,而且线程执行顺序本来就不是人所能控制的 --------------------编程问答-------------------- 这算法很给力啊 哈哈 --------------------编程问答-------------------- 太经典了,这都能想到,哈哈 --------------------编程问答-------------------- 听他们说算法,算法,难道这就是算法!!! --------------------编程问答-------------------- 我觉的吧,有点大材小用,然后呢,如果排序的数目过多的话,系统开销貌似就太大了 --------------------编程问答-------------------- 看了半天才反应过来 牛人呀 --------------------编程问答-------------------- package alex.sort;
//仿写个简单可靠的,就是CPU累点
public class SortFor {
public static void main(String[] args) {
int[] nums = {11,19,29,66,12,33,64,76,56};
for(int i=0,n=0;;i++){
if(contains(nums,i)){
System.out.print(i);
n++;
if(n>nums.length){
return;
}else{
System.out.print(",");
}
}
}
}
private static boolean contains(int[] nums,int i) {
for(int j=0;j<nums.length;j++){
if(i==nums[j]){
return true;
}
}
return false;
}
}
--------------------编程问答--------------------
肯定可以啊,比如1000-a[i]; --------------------编程问答-------------------- 佩服,顶一个 --------------------编程问答-------------------- 笑翻了,留名~! --------------------编程问答-------------------- 有想法了 --------------------编程问答-------------------- 条条道路通罗马
太易做图的有才了... --------------------编程问答-------------------- 很强悍的思维啊,佩服~ --------------------编程问答-------------------- 能想到这样做的人, 确实很牛逼, 但是数据量一大,那么久没办法咯 --------------------编程问答-------------------- 经典呀!作者天才呀。 --------------------编程问答-------------------- 还有个猴子排序算法,也是很扯淡! --------------------编程问答-------------------- 排大数就恶心了…… --------------------编程问答-------------------- 很新颖 哈哈 --------------------编程问答-------------------- 学习一下! --------------------编程问答-------------------- 很有想法,想法是好的,结果是不可预料的 --------------------编程问答-------------------- 看看....... --------------------编程问答-------------------- Bogo 排序很强大,算法效率 O(n*n!)。
详见:http://zh.易做图.org/wiki/Bogo%E6%8E%92%E5%BA%8F --------------------编程问答--------------------
围观者:估计是写给人算的。
补充:Java , Java SE