2012-11-28 20 views
1

所以我尝试实现我的快速排序按照他们的重量排序边缘数组,这是在我的克鲁斯卡尔算法实现int。在JavaScript中是否有一个构建的函数,用于通过属性对对象数组进行排序?在这种情况下,他们的重量。从最小的重量到最大的重量。对他们的Int对象数组排序

这是我的边缘类。

class Edge 
    {    
     private int u; 
     private int v; 
     private int weight; 

     public Edge(int i, int i2, int w) 
     { 
      u = i; 
      v = i2; 
      weight = w; 
     } 

     public int getU() { 
      return u; 
     } 

     public int getV() { 
      return v; 
     } 

     public int getWeight() { 
      return weight; 
     } 
    } 

Kruskal的代码

class MSTKruskal 
    {   
     Edge[] mst(int[][] G) 
     { 
      Edge A[] = new Edge[G.length - 1];    
      Forest aForest = new Forest(G.length);     
      Edge E[] = new Edge[(G.length * G.length - G.length)/2]; 
      int i3 = 0; 
      for (int i = 0; i < G.length; i++) 
      { 
       for(int i2 = i+1; i2 < G.length; i2++) 
       {      
        Edge anEdge = new Edge(i, i2, G[i][i2]); 
        E[i3] = anEdge; 
        i3++; 
       } 
      } 
      print(E);   
      //QuickSort(E, 0, E.length); 
      print(E); 
      int index = 0; 
      for (int i = 0; i < E.length; i++) 
      { 
       if (aForest.findSet(E[i].getU()) != aForest.findSet(E[i].getV())) 
       { 

         A[index] = E[i]; 
         index++; 
         aForest.union(E[i].getU(), E[i].getV()); 

       } 
      } 
      aForest.printA(); 
      return A; 

     } 

回答

0

在javascript中可以传递函数作为参数进行排序的方法,这个功能应该采取2个参数(a和b),并返回:

  • 0 ,如果a == b
  • < 0,如果a < b
  • > 0,如果A> B

你的情况应该是这样的:

var a=[15,7,100,50]; 
a.sort(function(a,b){return a.weight-b.weight;}); 

所以你可以很容易地排序任何阵列内容的属性,甚至更复杂的标准。

+0

我是否在我的Edge类中创建了这个函数? – user1861108

+0

不,这个功能应该采取两个边缘,并按重量进行比较。实际上,它应该看起来像这样:'function(a,b){return a.getWeight() - b.getWeight();}' – cleg