【问题标题】:How to Tell when Brute Force Sort Algorithm Is Sorted如何判断暴力排序算法何时排序
【发布时间】:2020-04-01 03:13:53
【问题描述】:

您好,我正在编写一个简单的搜索/蛮力排序算法,但我不确定在排序后如何停止它。我知道算法是如何工作的,我已经为它编写了代码,我已经实现了一个 while(!sorted) 循环,但这似乎并没有奏效。我怎么知道何时停止调用算法本身,即何时排序。我知道对于冒泡排序之类的东西,它是大 O 表示法,所以你循环 n 次平方,但是这个排序算法呢?这是我失败的尝试,我得到的错误是网页本身崩溃,console.logs 没有打印出任何加载,控制台中没有任何内容。

var 
cols         = 100;
windowWidth  = 800, windowHeight = 800,
dataWidth     = windowWidth/cols,
dataStructure = new Array(cols),
colorCode    = [],
sortedd = new Boolean;

//function discovered on https://stackoverflow.com/questions/951021/what-is-the-javascript-version-of-sleep
function sleep(ms) {
   return new Promise(resolve => setTimeout(resolve, ms));
}

function setup(){

   createCanvas(windowWidth, windowHeight);
   for(var i = 0; i < dataStructure.length; i ++){
       dataStructure[i] = random(800);
       colorCode[i] = "blank";
   }
   while(!sorted(dataStructure)){
    sorted(dataStructure);
   }
}

function naiveSort(arr){

    for(var i = 0; i < arr.length - 1; i ++){
        colorCode[i] = "red";
        var temp = Math.random() * (dataStructure.length);
            swap(arr, i, temp);
            colorCode[i] = "red";
    }
}

function sorted(arr){
    for(var i = 0; i < arr.length - 1; i ++){
        if(arr[i] > arr[i + 1]){
            return false;
        }
    }
    return true;
}

 function swap(arr, a, b){
       var temp = arr[a];
           arr[a] = arr[b];
           arr[b] = temp;
}


忽略createCanvas,p5js库函数,不影响问题

【问题讨论】:

  • 我认为只是用这些数字排序需要很长时间。尝试一些较小的 cols 值。
  • 嗯,为什么它可以与其他排序算法一起使用,我已经完成了快速排序和冒泡,它们都在这种规模下工作
  • 您没有调用您的naiveSort 函数,而且它似乎不是一个排序函数,因为它将所有元素设置为"red"。我猜你已经对代码进行了一些编辑,看看你是否能理解发生了什么,但这会导致一个非常难以理解的问题。
  • @B.brown 这两个都是多项式时间。这看起来是指数级的。这是一个巨大的差异!

标签: javascript algorithm sorting


【解决方案1】:

你的代码是

while(!sorted(dataStructure)){
    sorted(dataStructure);
   }

应该是什么时候

while(!sorted(dataStructure)){
    naiveSort(dataStructure);
   }

【讨论】:

  • Michael Huang 仍然没有运气,当我把 console.log("test");在循环中我从来没有得到它,我注意到我犯了这个错误,我在尝试其他方法时一定是盲目地这样做了,知道是什么原因造成的吗?
猜你喜欢
  • 2020-11-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多