自己写得js背包问题的贪心算法实现

//背包问题 的贪心选择算法
//
//0-1背包问题每个物品只有放和不放两种选择(可用动态规划方法求解)
//背包问题则可以放入一部分(可用贪心选择求解)

class Diamond {
    constructor(name,weight,value){
        this.name = name
        this.weight = weight
        this.value = value
    }
}

var diamonds=new Array(3)
diamonds[0]=new Diamond("碎-红宝石",5,20)
diamonds[1]=new Diamond("碎-蓝宝石",4,10)
diamonds[2]=new Diamond("碎-绿宝石",3,12)

function knapsackGreedy(diamondArr,c){
    if(!diamondArr instanceof Array) return
    if(!c) return

    let n = diamondArr.length

    diamondArr.forEach((element,index,array) => {
        Object.defineProperty(element,'valuePerWeight',{value:element.value/element.weight})
    });

    let sortedArr = diamondArr.sort((a,b)=>{
        if(a.valuePerWeight>b.valuePerWeight) return -1
        if(a.valuePerWeight<b.valuePerWeight) return 1
        return 0
    })

    let tempc = c,
        sumValue = 0,
        i=0
    while(tempc){
        if(tempc>sortedArr[i].weight){
            console.log("拿走了"+sortedArr[i].name)
            sumValue+=sortedArr[i].value
            tempc-=sortedArr[i].weight
        }else{
            console.log("拿走了"+tempc/sortedArr[i].weight+sortedArr[i].name)
            sumValue+=(sortedArr[i].valuePerWeight)*tempc
            tempc = 0
        }
        i++
    }

    console.log("总价值"+sumValue)

}

knapsackGreedy(diamonds,10)