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-16 12:56:11 +08:00
parent 4a852b0672
commit 6d55f8ae8a
3 changed files with 155 additions and 24 deletions

View File

@ -1,7 +1,19 @@
/**
* 排序算法父类 Sort v0.1.0
*
* @author coder-xiaomo
* @date 2022-05-16
*/
class Sort {
constructor() {
}
info() {
return {
name: "未命名算法"
}
}
sort() {
console.log("this method was not implement.")
}
@ -29,27 +41,23 @@ class Sort {
// console.log(array, index1, index2)
}
}
/**
* 快速排序算法 Qucik Sort v0.1.0
*
* @author coder-xiaomo
* @date 2022-05-16
*/
/**
* step
*
* 1. 首先设定一个分界值通过该分界值将数组分成左右两部分
* 2. 将大于或等于分界值的数据集中到数组右边小于的集中到左边
* 3. 左右两侧的数组分别重复步骤 2.
* 4. 完成排序
*/
class QuickSort extends Sort {
// static arr
// constructor(array) {
// this.arr = array
// }
/**
* step
*
* 1. 首先设定一个分界值通过该分界值将数组分成左右两部分
* 2. 将大于或等于分界值的数据集中到数组右边小于的集中到左边
* 3. 左右两侧的数组分别重复步骤 2.
* 4. 完成排序
*/
// sort(array) {
// if (array.length <= 1)
@ -59,7 +67,7 @@ class QuickSort extends Sort {
// let left = [], right = []
// for (let i = 1; i < array.length; i++) {
// const element = array[i];
// const element = array[i]
// if (element <= num)
// left.push(element)
// else
@ -70,6 +78,12 @@ class QuickSort extends Sort {
// return this.sort(left).concat(num, this.sort(right))
// }
info() {
return {
name: "快速排序算法"
}
}
/*
每个未排序的部分
将第一个元素设为 pivot
@ -87,7 +101,7 @@ class QuickSort extends Sort {
return array // 递归出口
const pivot = left // 第一个元素的索引
let p = left + 1;
let p = left + 1
for (let i = left + 1; i <= right; i++) {
if (array[i] < array[pivot]) {
this.swap(array, i, p)
@ -103,12 +117,57 @@ class QuickSort extends Sort {
}
}
const quicksort = new QuickSort()
var result = quicksort.sort([5, 8, 7, 4, 3, 1, 6, 2, 6, 5])
console.log("result", result)
console.log()
var data = []
for (let i = 0; i < 20; i++) // 生成随机数
data.push(Math.ceil(Math.random() * 100 - 50))
console.log("result", quicksort.sort(data))
/**
* 冒泡排序算法 Qucik Sort v0.1.0
*
* @author coder-xiaomo
* @date 2022-05-16
*/
class BubbleSort extends Sort {
info() {
return {
name: "冒泡排序算法"
}
}
/*
swapped = false
i = 1 最后一个没有排序过元素的索引-1
如果 左边元素 > 右边元素
交换左边元素右边元素
swapped = true; ++swapCounter交换计数器
while swapped
*/
sort(array) {
let sortTime = 0;
let swapped
do {
swapped = false
for (let i = 1; i < array.length - sortTime; i++) {
if (array[i - 1] > array[i]) {
this.swap(array, i - 1, i)
swapped = true
}
}
sortTime++
} while (swapped)
// let swapCounter = array.length - 1;
// while (swapCounter > 0) {
// console.log(swapCounter)
// for (let i = 1; i < array.length - swapCounter; i++) {
// if (array[i - 1] > array[i]) {
// this.swap(array, i - 1, i)
// }
// }
// swapCounter--;
// }
return array
}
}

View File

@ -0,0 +1,69 @@
/**
* 排序算法测试
*/
/**
* 创建一个随机数数组
* @returns
*/
function getRandomData(count = 20) {
var randomData = []
for (let i = 0; i < count; i++) // 生成随机数
randomData.push(Math.ceil(Math.random() * 100 - 50))
return randomData
}
var data = [
[],
[-1],
[1, 1, 1, 1, 1, 1, 1],
[5, 8, 7, 4, 3, 1, 6, 2, 6, 5],
[1, 2],
[1, 2, 3, 4, 5, 6, 7, 8],
[8, 7, 6, 5, 4, 3, 2, 1],
getRandomData(6),
]
var check = [
[],
[-1],
[1, 1, 1, 1, 1, 1, 1],
[1, 2, 3, 4, 5, 5, 6, 6, 7, 8],
[1, 2],
[1, 2, 3, 4, 5, 6, 7, 8],
[1, 2, 3, 4, 5, 6, 7, 8],
null,
null
]
var sortAlgorithm = {
quicksort: new QuickSort(),
bubblesort: new BubbleSort(),
}
// 遍历每一种算法
Object.values(sortAlgorithm).forEach(sortAlgo => {
// 输出调试信息
console.log("算法信息", sortAlgo.info())
data.forEach(element => {
// 将数组元素进行深拷贝
var input = JSON.parse(JSON.stringify(element))
// 进行排序
var result = sortAlgo.sort(input)
console.log(input, result)
// 与结果进行对比,判断是否正确
if (data.indexOf(element) > -1) {
var rightSortResult = check[data.indexOf(element)];
if (rightSortResult) {
if (JSON.stringify(rightSortResult) !== JSON.stringify(result)) {
console.warn("👆结果不匹配!正确结果为", rightSortResult)
} else {
console.info("👆正确")
}
} else {
console.log("👆缺少正确答案,跳过")
}
}
});
// 输出一个空行,便于观察
console.log("-----------------------------------------------")
});

View File

@ -59,7 +59,10 @@
<script src="./assets/js/index.js"></script>
<!-- 排序算法 -->
<script src="./assets/js/algorithm/sort.js"></script>
<!-- 算法测试 -->
<script src="./assets/js/algorithm/test.js"></script>
</body>
</html>