1
0
mirror of https://gitee.com/coder-xiaomo/algorithm-visualization synced 2025-01-10 11:48:18 +08:00
Code Issues Projects Releases Wiki Activity GitHub Gitee

添加归并排序、随机快速排序、计数排序、基数排序算法框架

This commit is contained in:
程序员小墨 2022-05-19 00:39:31 +08:00
parent d867150566
commit 4e857942f6
2 changed files with 183 additions and 9 deletions

View File

@ -10,7 +10,11 @@ function getSortClassList() {
QuickSort,
BubbleSort,
SelectionSort,
InsertionSort
InsertionSort,
MergeSort,
RandomQuickSort,
CountingSort,
RadixSort,
]
}
@ -23,7 +27,8 @@ class Sort {
info() {
return {
name: "未命名算法"
name: "未命名算法",
available: false
}
}
@ -92,7 +97,8 @@ class QuickSort extends Sort {
info() {
return {
name: "快速排序算法"
name: "快速排序算法",
available: true
}
}
@ -166,7 +172,8 @@ class BubbleSort extends Sort {
info() {
return {
name: "冒泡排序算法"
name: "冒泡排序算法",
available: true
}
}
@ -227,7 +234,8 @@ class SelectionSort extends Sort {
info() {
return {
name: "选择排序算法"
name: "选择排序算法",
available: true
}
}
@ -270,7 +278,6 @@ class SelectionSort extends Sort {
}
/**
* 插入排序算法 Insertion Sort v0.1.0
*
@ -281,7 +288,8 @@ class InsertionSort extends Sort {
info() {
return {
name: "插入排序算法"
name: "插入排序算法",
available: true
}
}
@ -297,7 +305,6 @@ class InsertionSort extends Sort {
sort(array) {
if (array.length == 0)
return array
console.log(array)
for (let i = 1; i < array.length; i++) {
let X = array[i]
let j = i - 1
@ -313,7 +320,6 @@ class InsertionSort extends Sort {
sortWithAnimation(customAttr, array) {
if (array.length == 0)
return array
console.log(array)
for (let i = 1; i < array.length; i++) {
let X = array[i]
animation.popupLinkedListItems(customAttr.id, i, {})
@ -329,3 +335,167 @@ class InsertionSort extends Sort {
return array
}
}
/**
* 归并排序算法 Merge Sort v0.1.0
*
* @author coder-xiaomo
* @date 2022-05-19
*/
class MergeSort extends Sort {
info() {
return {
name: "归并排序算法"
}
}
/*
将每个元素拆分成大小为1的分区
递归地合并相邻的分区
遍历 i = 左侧首项位置 右侧末项位置
如果左侧首项的值 <= 右侧首项的值
拷贝左侧首项的值
否则 拷贝右侧首项的值; 增加逆序数
将元素拷贝进原来的数组中
*/
sort(array) {
if (array.length == 0)
return array
// todo
console.log("尚未实现")
return array
}
sortWithAnimation(customAttr, array) {
if (array.length == 0)
return array
// todo
console.log("尚未实现")
return array
}
}
/**
* 随机快速排序算法 Random Quick Sort v0.1.0
*
* @author coder-xiaomo
* @date 2022-05-19
*/
class RandomQuickSort extends Sort {
info() {
return {
name: "随机快速排序算法"
}
}
/*
每个未排序的部分
随机选取 pivot和第一个元素交换
存储索引 = pivot索引 +1
i=pivot指数 +1 最右索引 的遍历
如果 a[i] < a[pivot]
交换 (i, 存储索引); 存储索引++;
交换(pivot, 存储索引 - 1)
*/
sort(array) {
if (array.length == 0)
return array
// todo
console.log("尚未实现")
return array
}
sortWithAnimation(customAttr, array) {
if (array.length == 0)
return array
// todo
console.log("尚未实现")
return array
}
}
/**
* 计数排序算法 Counting Sort v0.1.0
*
* @author coder-xiaomo
* @date 2022-05-19
*/
class CountingSort extends Sort {
info() {
return {
name: "计数排序算法"
}
}
/*
创建关键值计数数组
遍历数列中的每个元素
相应的计数器增加 1
每轮计数都从最小的值开始
当计数为非零数时
重新将元素存储于列表
将计数减1
*/
sort(array) {
if (array.length == 0)
return array
// todo
console.log("尚未实现")
return array
}
sortWithAnimation(customAttr, array) {
if (array.length == 0)
return array
// todo
console.log("尚未实现")
return array
}
}
/**
* 基数排序算法 Radix Sort v0.1.0
*
* @author coder-xiaomo
* @date 2022-05-19
*/
class RadixSort extends Sort {
info() {
return {
name: "基数排序算法"
}
}
/*
分别给每个数位0到9创造1个桶数列共计10个
遍历每个数位
遍历数列中的每个元素
将元素移至相应的桶中
在每个桶中从最小的数位开始
当桶不是空的
将元素恢复至数列中
*/
sort(array) {
if (array.length == 0)
return array
// todo
console.log("尚未实现")
return array
}
sortWithAnimation(customAttr, array) {
if (array.length == 0)
return array
// todo
console.log("尚未实现")
return array
}
}

View File

@ -132,6 +132,10 @@ function initialize() {
const sortClass = new sortClassList[i](animation)
const sortClassInfo = sortClass.info()
// 跳过未完成的算法
if (!sortClassInfo['available'])
continue
let ctrlBtn = document.createElement("button")
ctrlBtn.innerHTML = sortClassInfo['name']
ctrlBtn.onclick = function () {