📅  最后修改于: 2023-12-03 15:18:12.344000             🧑  作者: Mango
快速排序(Quicksort)是一种常用的排序算法,属于交换排序的一种。由于快速排序在大多数情况下具有稳定性好、效率高的特点,常常被采用用于排序领域。本文将介绍如何使用 p5.js 实现快速排序算法。
快速排序的基本思想是选择一个基准元素,将序列中小于该基准元素的值放到左边,大于该基准元素的值放到右边,然后递归地重复该过程,直至整个序列有序。
快速排序的时间复杂度为 O(n*log(n)),但最坏情况下的时间复杂度为 O(n^2),因此为了避免最坏情况的出现,可以采用随机选择基准元素的方法。
我们可以把快速排序分为三个部分:
代码如下:
function quickSort(arr) {
if (arr.length <= 1) {
return arr;
}
var pivotIndex = Math.floor(Math.random() * arr.length);
var pivot = arr[pivotIndex];
var less = [];
var greater = [];
for (var i = 0; i < arr.length; i++) {
if (i === pivotIndex) {
continue;
}
if (arr[i] < pivot) {
less.push(arr[i]);
} else {
greater.push(arr[i]);
}
}
return quickSort(less).concat([pivot], quickSort(greater));
}
为了方便观察快速排序的过程,我们可以使用 p5.js 来绘制序列,并在每一次划分后重新绘制序列。具体绘制过程如下:
var arr = [3, 7, 4, 9, 5, 2, 6, 1, 8];
function setup() {
createCanvas(800, 600);
frameRate(10);
}
function draw() {
background(255);
textSize(32);
textAlign(CENTER, CENTER);
for (var i = 0; i < arr.length; i++) {
var x = map(i, 0, arr.length, 50, width - 50);
var y = map(arr[i], 1, arr.length, 50, height - 50);
text(arr[i], x, y);
}
arr = quickSort(arr);
}
我们可以将上面的代码保存为 sketch.js
文件,并将它和 p5.js 的库文件一起放到一个文件夹中,在浏览器中打开 index.html
文件即可看到排序的过程。
本文介绍了如何使用 p5.js 实现快速排序算法,并通过可视化的方式展示了排序的过程。需要注意的是,最坏情况下快速排序的时间复杂度为 O(n^2),因此在实际应用中需要采取一些方法来避免最坏情况的出现。