Skip to content
Snippets Groups Projects
Commit 6a80405a authored by David Sehnal's avatar David Sehnal
Browse files

sorting fixes

parent fc4473e7
No related branches found
No related tags found
No related merge requests found
......@@ -84,9 +84,24 @@ function partitionArrayAsc(data: number[], parts: number[], l: number, r: number
parts[1] = tail;
}
function insertionSort({ data, cmp, swap }: Ctx, start: number, end: number) {
for (let i = start + 1; i <= end; i++) {
let j = i - 1;
while (j >= start && cmp(data, j, j + 1) > 0) {
swap(data, j, j + 1);
j = j - 1;
}
}
}
function quickSort(ctx: Ctx, low: number, high: number) {
const { parts } = ctx;
while (low < high) {
if (high - low < 16) {
insertionSort(ctx, low, high);
return;
}
partitionGeneric(ctx, low, high);
const li = parts[0], ri = parts[1];
......@@ -100,11 +115,11 @@ function quickSort(ctx: Ctx, low: number, high: number) {
}
}
function insertionSort(data: number[], start: number, end: number) {
function insertionSortArrayAsc(data: number[], start: number, end: number) {
for (let i = start + 1; i <= end; i++) {
const key = data[i];
let j = i - 1;
while (j >= 0 && data[j] > key) {
while (j >= start && data[j] > key) {
data[j + 1] = data[j];
j = j - 1;
}
......@@ -115,7 +130,7 @@ function insertionSort(data: number[], start: number, end: number) {
function quickSortArrayAsc(data: number[], parts: number[], low: number, high: number) {
while (low < high) {
if (high - low < 16) {
insertionSort(data, low, high);
insertionSortArrayAsc(data, low, high);
return;
}
......
......@@ -50,7 +50,8 @@ function shuffleArray(data: any[]) {
}
describe('qsort-array asc', () => {
const data0 = [1, 2, 3, 4, 5, 6, 7, 8, 9];
const data0 = new Array(50);
for (let i = 0; i < data0.length; i++) data0[i] = i;
const data1 = [1, 1, 2, 2, 3, 3, 4, 4, 4, 6, 6, 6];
function test(name: string, data: any[], randomize: boolean) {
......@@ -72,7 +73,8 @@ describe('qsort-array asc', () => {
})
describe('qsort-array generic', () => {
const data0 = [1, 2, 3, 4, 5, 6, 7, 8, 9];
const data0 = new Array(50);
for (let i = 0; i < data0.length; i++) data0[i] = i;
const data1 = [1, 1, 2, 2, 3, 3, 4, 4, 4, 6, 6, 6];
function test(name: string, data: any[], randomize: boolean) {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment