diff --git a/ascent/src/features/ascent/sortingByDeletion.js b/ascent/src/features/ascent/sortingByDeletion.js
index dc52a4ba12e2aecdba6250a57099bddce285806f..2d09ed9d9066d6ef02c19a7b5182b5ffcccebd61 100644
--- a/ascent/src/features/ascent/sortingByDeletion.js
+++ b/ascent/src/features/ascent/sortingByDeletion.js
@@ -1,3 +1,35 @@
+class Backpointer {
+  constructor(previousIndex, count) {
+    this.previousIndex = previousIndex;
+    this.count = count;
+  }
+}
+
+function chooseBackpointer(list, backpointers) {
+  const currentIndex = backpointers.length;
+  const currentElement = currentIndex < list.length ? list[currentIndex] : Infinity;
+  let best = new Backpointer(undefined, 0);
+  for (let i = 0; i < currentIndex; ++i) {
+    if (list[i] <= currentElement) {
+      const candidate = new Backpointer(i, backpointers[i].count + 1);
+      if (candidate.count > best.count) {
+        best = candidate;
+      }
+    }
+  }
+  return best;
+}
+
 export function deleteToSort(list) {
-  return []; // TODO: stub
+  const backpointers = [];
+  while (backpointers.length <= list.length) {
+    backpointers.push(chooseBackpointer(list, backpointers));
+  }
+  const reversedResults = [];
+  for (let current = backpointers[list.length].previousIndex;
+    current !== undefined;
+    current = backpointers[current].previousIndex) {
+    reversedResults.push(list[current]);
+  }
+  return reversedResults.reverse();
 }