当前位置:编程学习 > JAVA >>

见过的最扯的排序算法

别的地方看过,感觉挺好玩,转之
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下的腳本。。。。。。。 --------------------编程问答--------------------
引用 3 楼 soli11722984 的回复:
Java code

#!/bin/bash
function f() {
    sleep "$1"
    echo "$1"
}
while [ -n "$1" ]
do
    f "$1" &
    shift
done
wait



這個是linux下的腳本。。。。。。。
    --------------------编程问答-------------------- 这算法,。。。真慢。。。 --------------------编程问答-------------------- 很新颖啊。。我勒哥神 --------------------编程问答-------------------- 这个太强 必须顶啊 = =  --------------------编程问答-------------------- 何等的卧槽啊... --------------------编程问答-------------------- 想法好啊,小的数停顿时间肯定快结束,自动就升序排列了 --------------------编程问答-------------------- 不好意思.我是菜鸟.sortThreads[i].start();这句是什么意思? --------------------编程问答-------------------- 佩服的五体投地,四脚朝天! --------------------编程问答-------------------- 哈哈 这个可以有!!!
存在既合理
支持一下!! --------------------编程问答-------------------- 长见识了 --------------------编程问答--------------------
引用 10 楼 d_east 的回复:
不好意思.我是菜鸟.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 --------------------编程问答--------------------
引用 4 楼 soli11722984 的回复:
引用 3 楼 soli11722984 的回复:

Java code

#!/bin/bash
function f() {
sleep "$1"
echo "$1"
}
while [ -n "$1" ]
do
f "$1" &amp;
shift
done
wait



這個是linux下的腳本。。。。。。。

哈哈,要是我,我就输入:10000,1
等阿等。。。。。。 --------------------编程问答-------------------- 这位哥,我只能膜拜 --------------------编程问答--------------------   的确很扯.. --------------------编程问答-------------------- 果然是能人辈出 --------------------编程问答-------------------- 扯淡,排大数的话 估计是史上最慢排序算法,不过有创意呵 --------------------编程问答-------------------- 有意思,但这样只能从小到大排序,从大到小就没办法了吧? --------------------编程问答-------------------- 很有意思。。 --------------------编程问答-------------------- 呵呵,看看即可 --------------------编程问答-------------------- 别出心裁啊 --------------------编程问答-------------------- 看不懂啊 --------------------编程问答-------------------- 这个有问题,运行的结果有可能不正确.

多线程,你永远不知道那个线程在执行,那个线程将会执行 --------------------编程问答--------------------
引用 41 楼 araychou 的回复:
这个有问题,运行的结果有可能不正确.

多线程,你永远不知道那个线程在执行,那个线程将会执行

不是有可能,哈哈,我运行了N次,没有一次是正确的,哈哈,我佩服的五体投地哪,这算法无敌了。 --------------------编程问答-------------------- 这个想法很牛,只是结果可能是错的。 --------------------编程问答-------------------- mark --------------------编程问答-------------------- 创意!!本来就不为了正确的,别管结果! --------------------编程问答-------------------- 这个想法很牛,只是结果可能是错的。呵呵 --------------------编程问答-------------------- 学习了 --------------------编程问答-------------------- 这样只能输出,不能排序.而且sleep线程只是挂起一段时间,挂起结束并不代表立刻执行.而且线程启动也是时间间隔的,所以不能保证顺序 --------------------编程问答-------------------- wa wa 哇 --------------------编程问答-------------------- 我在想,如果是100000,100000001,20000000000000,这样的数字排序时会是什么效果 --------------------编程问答-------------------- 有人能写成C的么... 完全看不懂 java 和shell = =  --------------------编程问答-------------------- 还不如一百个闹钟,把时间都校对好。等着它闹铃。 --------------------编程问答-------------------- 有个问题    数很多之后,   后面的数也许比较小,但是因为for循环循环到它的时候时间已经过去不少了,比它大的数都已经出现了。。。。。。。。 --------------------编程问答--------------------
引用 51 楼 chiyiangel 的回复:
有人能写成C的么... 完全看不懂 java 和shell = =


就是对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};
每次结果都不一样 --------------------编程问答-------------------- "最扯"
扯的是想法~!正确与否就不必去追究了!!!! --------------------编程问答-------------------- 杀鸡焉用牛刀 线程都赶上了? --------------------编程问答--------------------
引用 63 楼 ldh2008 的回复:
比如:int[] ints = {1001,1007,1003,1009,1002};
每次结果都不一样


为什么我每次的结果都一样??? --------------------编程问答--------------------

/* 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;
}
--------------------编程问答-------------------- 牛人哪都有这里特别多 --------------------编程问答-------------------- 写了个PHP版的

<?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);
?>
--------------------编程问答-------------------- 想法不错!哈哈 --------------------编程问答-------------------- BH的程序 --------------------编程问答-------------------- 上面的同学何必那么较真呢,难道你们不觉得很有才嘛
哈哈哈,笑死我了 --------------------编程问答-------------------- 要么是天才,要么是傻逼。不过我更相信他是无聊。都是寂寞惹得祸! --------------------编程问答-------------------- 强贴留名。 --------------------编程问答--------------------

这是人才啊!!!! --------------------编程问答-------------------- 鬼才啊!!! --------------------编程问答-------------------- 楼主在哪里见到的,简直是神作呀! --------------------编程问答-------------------- 顶起,想法很有创意,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;
}

}
--------------------编程问答--------------------
引用 36 楼 wpooh 的回复:
有意思,但这样只能从小到大排序,从大到小就没办法了吧?


肯定可以啊,比如1000-a[i]; --------------------编程问答-------------------- 佩服,顶一个 --------------------编程问答-------------------- 笑翻了,留名~! --------------------编程问答-------------------- 有想法了 --------------------编程问答-------------------- 条条道路通罗马


太TMD的有才了... --------------------编程问答-------------------- 很强悍的思维啊,佩服~ --------------------编程问答-------------------- 能想到这样做的人, 确实很牛逼,  但是数据量一大,那么久没办法咯 --------------------编程问答-------------------- 经典呀!作者天才呀。 --------------------编程问答-------------------- 还有个猴子排序算法,也是很扯淡! --------------------编程问答-------------------- 排大数就恶心了…… --------------------编程问答-------------------- 很新颖 哈哈 --------------------编程问答-------------------- 学习一下! --------------------编程问答-------------------- 很有想法,想法是好的,结果是不可预料的 --------------------编程问答-------------------- 看看....... --------------------编程问答-------------------- Bogo 排序很强大,算法效率 O(n*n!)。

详见:http://zh.wikipedia.org/wiki/Bogo%E6%8E%92%E5%BA%8F --------------------编程问答--------------------
引用 42 楼 craky 的回复:
引用 41 楼 araychou 的回复:

这个有问题,运行的结果有可能不正确.

多线程,你永远不知道那个线程在执行,那个线程将会执行

不是有可能,哈哈,我运行了N次,没有一次是正确的,哈哈,我佩服的五体投地哪,这算法无敌了。


围观者:估计是写给人算的。
补充:Java ,  Java SE
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,