How it works
Insert a value into a binary min-heap and restore the heap property by sifting it up.
Implementation
function heapInsertOp(state, value) { const values = state.values; let i = values.length; values[i] = value; insertNode(i, value); while (i > 0) { const parent = Math.floor((i - 1) / 2); compareKeys(i, parent); if (values[i] < values[parent]) { const tmp = values[i]; values[i] = values[parent]; values[parent] = tmp; swapNodes(i, parent); i = parent; } else { finish(i); return; } } finish(i); }
def heapInsertOp(state, value): values = state.values i = values.length values[i] = value insertNode(i, value) while (i > 0): parent = ((i - 1) // 2) compareKeys(i, parent) if (values[i] < values[parent]): values[i], values[parent] = values[parent], values[i] swapNodes(i, parent) i = parent else: finish(i) return finish(i)
#include <vector> #include <algorithm> void heapInsertOp(int state, int value) { auto values = state.values; auto i = values.length; values[i] = value; insertNode(i, value); while((i > 0)) { auto parent = ((i - 1) / 2); compareKeys(i, parent); if((values[i] < values[parent])) { std::swap(values[i], values[parent]); swapNodes(i, parent); i = parent; } else { finish(i); return; } } finish(i); }
public void heapInsertOp(int state, int value) { var values = state.values; var i = values.length; values[i] = value; insertNode(i, value); while((i > 0)) { var parent = ((i - 1) / 2); compareKeys(i, parent); if((values[i] < values[parent])) { { int _t = values[i]; values[i] = values[parent]; values[parent] = _t; } swapNodes(i, parent); i = parent; } else { finish(i); return; } } finish(i); }
#include <stdio.h> void heapInsertOp(int state, int value) { var values = state.values; var i = values.length; values[i] = value; insertNode(i, value); while((i > 0)) { var parent = ((i - 1) / 2); compareKeys(i, parent); if((values[i] < values[parent])) { { int _t = values[i]; values[i] = values[parent]; values[parent] = _t; } swapNodes(i, parent); i = parent; } else { finish(i); return; } } finish(i); }