自己写得关于js贪心算法活动安排问题的实现

// 贪心算法 - 活动安排问题
// compareFunction()
function compareEndTime(a,b){
    if(a.endTime<b.endTime){
        return -1
    }
    if(a.endTime>b.endTime){
        return 1
    }
    return 0
}

// 贪心算法有两个基本要素
//   1.贪心选择性质
//    假设E是所有活动
//    那么A包含于E,且A是该活动安排问题的一个最优解
//    假设A的第一个活动是k
//    假设k = 1,那么A就是以贪心选择开始的最优解
//   假设k ≠ 1,那么设B = {A-{k}}∪{1} 即把A的第一个选择k去掉换成是1
//   在这个情况下 B 的数量等于 A-1+1
//   则B也是该问题的一个最优解
// 2.最优子结构性质
//    假设首先将1加进A中,即活动1是最优解的第一个活动
//    那么问题就变成了求E中所有与活动1相容的最大子集合
//    假设A是原问题最优解,那么A' = A - {1}就是新的问题
//    E' = {i∈E,si>f1} 即求剩下活动中的最大相容子集的最优解
//    反证法
//    假设A'不是这个新问题的最优解,这个新问题存在一个最优解B'且B'活动数大于A’
//    那么B'+{1} = B (B的活动数大于A) 的这个解也会是原问题 E 的最优解
//    自相矛盾
class Activity {
    constructor(start,end){
        this.startTime = start
        this.endTime = end
    }
}

var activities = new Array(12)

activities[5]=new Activity(1,4)
activities[11]=new Activity(3,5)
activities[4]=new Activity(0,6)
activities[3]=new Activity(5,7)
activities[1]=new Activity(3,8)
activities[9]=new Activity(5,9)
activities[7]=new Activity(6,10)
activities[8]=new Activity(8,11)
activities[6]=new Activity(8,12)
activities[10]=new Activity(2,13)
activities[2]=new Activity(12,14)

//这些活动已经按结束时间的非递减序排列好

function greedySelect(activityArr){
    var resultArr = []
    var currentEnd = 0
    activityArr.sort(compareEndTime).forEach(element => {
        if(element.startTime>currentEnd){
            resultArr.push(element)
            currentEnd = element.endTime
        }
    });
    return resultArr
}

console.log(greedySelect(activities))