为什么JavaScript选择排序挂起

时间:2013-07-31 16:30:38

标签: javascript algorithm sorting

我有以下代码:

var longLorem = "..."; // here is a string, > 1 000 000 length
var bufferSize = 1000000;
var lorem = longLorem.substring(0, bufferSize - 1).split('');
var swap; 
var i, j;
for(i=0;i<bufferSize;i++){
    for(j=i+1;j<bufferSize;j++){
    if(lorem[i] > lorem[j]){
        swap = lorem[i];
        lorem[i] = lorem[j];
        lorem[j] = swap;
    }
    }
}

为什么它会挂在Chrome下?如何加速JavaScript或者不可能像DOM和UI那样加速?

使用bufferSize=100 000,它会在2分35秒内完成。

以下C程序在&gt; 17m

完成
#include <stdio.h>
#define bufferSize 1000000

int main( int argc, char *argv[] )
{
   int i,j;
   char swap;
   FILE *loremFile = fopen("lorem.txt", "r");

   char buff[bufferSize];
   fgets(buff, bufferSize, (FILE*)loremFile);
   fclose(loremFile);

   //printf("'%s'\n-----END--------\n", buff );
   for(i=0; i<bufferSize-1;i++)
   {
       for(j=i+1;j<bufferSize-1;j++)
       {
           if((int)buff[i] > (int) buff[j])
        {
            swap = (char)buff[i];
            //printf("%c with %c\n", buff[i], buff[j]);
            buff[i] =(char) buff[j];
            buff[j] = swap;
        }
       }
   }
   //buff[bufferSize-1] = '\0';
//   for(i=0;i<bufferSize;i++){
//     printf("%c", buff[i]);
//   }

   printf("'%s'\n-----END--------\n", buff);
   printf("exit\n");

   return 0;
}

C#代码完成大约10米:

using System;

namespace MySort {
    public class Some {
    public static void Main() {
        int bufferSize = 1000000;
        string loremFile = System.IO.File.ReadAllText("lorem.txt");
        var chars = loremFile.ToCharArray(0, bufferSize);

        for(int i = 0; i<bufferSize; i++) {
        for(int j=i+1; j<bufferSize; j++) {
            if(chars[i] > chars[j]) {
            char swap = chars[i];
            chars[i] = chars[j];
            chars[j] = swap;
            }
        }
        }

        Console.Write("'");
        Console.Write(chars);
        Console.Write("'\n");
    }
    }
}

1 个答案:

答案 0 :(得分:0)

我认为Chrome在长时间运营期间会有悬挂的趋势,有时会崩溃。我已经在Chrome和Firefox中做过一些事情,而Chrome只会崩溃选项卡,就像Firefox一样,它也会永远消失,但它不会崩溃。我会继续在Firefox上获得继续/停止脚本弹出窗口。

如果您说在c中完成大约需要20分钟,那么我认为网络浏览器需要很长时间(如果不是更长时间),并且在大多数情况下,浏览器会尝试终止该脚本。