Published
Edited
Feb 19, 2020
Fork of Bubble Sort
2 forks
4 stars
Insert cell
Insert cell
{
var svg = d3.select(DOM.svg(900,90)).attr("style","background:white;border:0px solid black")
var outer = svg.append("g").attr("transform",`translate(20,35)`)
var arr = new Arr({element:outer,x:0,y:0,data:data})
yield svg.node()
var duration = 100
for(var i = 0;i<=data.length-1;i++){
arr.insert(i,duration,"cornflowerblue")
await outer.transition().duration(4*duration).attr("transform",`translate(20,35)`).end()
}
}
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
class Arr{
constructor(props){
Object.keys(props).forEach((key)=>{this[key] = props[key]})
this.outer = this.element.append("g").attr("transform",`translate(${this.x},${this.y})`)
this.inner = this.outer.append("g")
this.array = []
for(var i = 0;i<this.data.length;i++){
this.array.push(new Entry({element:this.inner,x:30*i,y:0,fill:"white",datumFill:"black",datum:this.data[i]}))
}
}
swap(i,j,duration,ease){
var temp = this.array[i]
this.array[i] = this.array[j]
this.array[j] = temp
temp = this.array[i].x
this.array[i].setX(this.array[j].x,duration,ease)
return this.array[j].setX(temp,duration,ease)
}
async insert(i,duration,color){
var entries = this.array
var proceed = true
await entries[i].setY(-30,duration,d3.easeLinear).end()
while(proceed){
if(i > 0 && entries[i].datum<entries[i-1].datum){
this.swap(i-1,i,duration,d3.easeLinear)
i = i - 1
}else{
proceed = false
}
}
await entries[i].setY(-30,duration,d3.easeLinear).end()
await entries[i].setY(0,duration,d3.easeLinear).end()
entries[i].setFill(color,duration)
entries[i].setDatumFill("white",duration)
}
}
Insert cell

Purpose-built for displays of data

Observable is your go-to platform for exploring data and creating expressive data visualizations. Use reactive JavaScript notebooks for prototyping and a collaborative canvas for visual data exploration and dashboard creation.
Learn more