Javascript 仅使用for循环对数字进行排序

Javascript 仅使用for循环对数字进行排序,javascript,algorithm,sorting,Javascript,Algorithm,Sorting,如果要根据其元素的对象属性Id值对Arr1进行排序,则将排列的数组Arr1放置在Arr2中,因此最后Arr2将是: var Arr2 = [{Id:1,Name:'Ajay1'},{Id:3,Name:'Ajay3'},{Id:5,Name:'Ajay5'},{Id:2,Name:'Ajay2'},{Id:4,Name:'Ajay4'}]; 我们可以使用排序或排列Arr1,然后迭代Arr2,将Arr1的排列元素迁移到Arr2。在下面的解决方案中,我们将不使用任何本机方法进行排序,它只是循环和逻

如果要根据其元素的对象属性Id值对Arr1进行排序,则将排列的数组Arr1放置在Arr2中,因此最后Arr2将是:

var Arr2 = [{Id:1,Name:'Ajay1'},{Id:3,Name:'Ajay3'},{Id:5,Name:'Ajay5'},{Id:2,Name:'Ajay2'},{Id:4,Name:'Ajay4'}];
我们可以使用排序或排列Arr1,然后迭代Arr2,将Arr1的排列元素迁移到Arr2。在下面的解决方案中,我们将不使用任何本机方法进行排序,它只是循环和逻辑比较

var Arr1=[{Id:1,名称:'Ajay1'},{Id:5,名称:'Ajay5'},{Id:3,名称:'Ajay3'}];
var Arr2=[{Id:3,名称:'Ajay3'},{Id:5,名称:'Ajay5'},{Id:1,名称:'Ajay1'},{Id:2,名称:'Ajay2'},{Id:4,名称:'Ajay4'}];
//var Arr1Res=[];
对于(i=0;iArr1[j+1].Id){
tmp=Arr1[j];
Arr1[j]=Arr1[j+1];
Arr1[j+1]=tmp;
}
}
}
//正在将安排的Arr1迁移到Arr2
对于(x=0;x

查看以下内容:

除了它的名字很吸引人之外,BubbleSort绝对没有什么值得推荐的。它不是最快的,甚至也不是最容易写的

ExtractionSort和InsertionSort都更快更容易编写。(所有三种排序所用的时间与被排序元素数的平方成正比,但后两种排序的比例常数至少要小两倍。)

这里是InsertionSort,定义为对数组进行就地排序。(如果不想就地排序,请先制作一份副本,然后就地排序。)

函数插入排序(A){
var N=A.长度;
如果(N<2){return;}
//首先将最小的元素移动到前面,从而简化主循环
变量leastInx=0,leastID=A[0].Id;
对于(var i=1;itmp.Id;--j){//无需测试j>0
A[j]=A[j-1];}
A[j]=tmp;}
}

当然,内置排序的运行时间为N log(N),这将清除所有这些O(N**2)排序。编写自己的排序程序可能会很有启发性,如果没有其他原因,我建议您这样做,但如果您想提高速度,请利用专家的技能。

1)这不是问题,2)您的答案无效。@Robert如果您选中“问问题”,您将在“发布”按钮下找到一个复选框,上面标有“回答你自己的问题-分享你的知识,问答式”我这样做就是为了这个目的。对不起,但我认为你仍然需要问一个问题才能回答它。无论如何,我甚至不知道这是如何排序的,因为结果似乎是随机排序的。问题“未说明此结果的
Arr1
Arr2
外观,或“将Arr1放入Arr2”的含义。事实上,我不知道你想要实现什么。你测试过演示吗?如果是,请检查浏览器的设置,它可能会阻止
alert
yes,我测试了演示,它会提醒ID 1,3,5,2,4。我认为迁移步骤的实现不正确。但是如果你拒绝发布一个合适的问题,人们怎么知道你的答案有什么问题呢?如果你仔细看的话,甘布斯坦根本没有回答这个“问题”。
 var Arr1 = [{Id:1,Name:'Ajay1'},{Id:5,Name:'Ajay5'},{Id:3,Name:'Ajay3'}];
var Arr2 = [{Id:3,Name:'Ajay3'},{Id:5,Name:'Ajay5'},{Id:1,Name:'Ajay1'},{Id:2,Name:'Ajay2'},{Id:4,Name:'Ajay4'}];
//var Arr1Res = [];   
    for (i = 0; i < Arr1.length; i++){      
      for (j = 0; j < (Arr1.length-1); j++){
        if (Arr1[j].Id > Arr1[j+1].Id){
           tmp = Arr1[j];
           Arr1[j] = Arr1[j + 1];
           Arr1[j + 1] = tmp;
        }
      }
    }
// Migrating Arranged Arr1 to Arr2    
    for (x = 0; x < Arr2.length; x++){
      for (y = 0; y < Arr1.length; y++){
        if (Arr1[y].Id != Arr2[x].Id){
          Arr2[y] = Arr1[y]
        }        
      }
    }
    Arr1Res = Arr2 // You can replace Arr2 by Arr1 to check Arranged Arr1

    for (k = 0; k < Arr1Res.length; k++){
      alert(Arr1Res[k].Id+"---"+Arr1Res[k].Name)
    }
function InsertionSort(A) {
    var N = A.length;
    if (N < 2) { return; }

    // Simplify the main loop by first moving the smallest element to the front
    var leastInx = 0, leastID = A[0].Id;
    for (var i = 1; i < N; ++i) { // note: i++ is cuter, but ++i is often faster
        var thisID = A[i].Id;     // avoid doing the same work twice
        if (thisId < leastId]) {
            leastInx = i; leastId = thisId; }}
    var tmp = A[0];
    A[0] = A[leastInx];
    A[leastInx] = tmp;

    // Now iterate over the remaining elements, inserting each in its
    // proper place among the already-sorted previous elements
    for (i = 2; i < N; ++i) {
        tmp = A[i];
        for (var j = i; A[j-1].Id > tmp.Id; --j) {    // no need to test j>0
            A[j] = A[j-1]; }
        A[j] = tmp; }
    }