桶排序、冒泡排序、快速排序练习
有 n(n <= 100, n 为正整数) 个同学参与调查,书本 ISBN 号为 m( m >= 1 && m <= 1000),相同 ISBN 只能买一本书。
一共需要买多少本?将需要买的书的 ISBN 按从小到大的顺序列出来。
// 随机输出 参数人数 和 书本 ISBN
const participators = parseInt(Math.random() * 100) + 1;
console.log('参与调查人数: ' + participators);
const bookISBNList = [];
for (let i = 0; i < participators; i++) {
bookISBNList.push(parseInt(Math.random() * 1000) + 1);
}
通过桶排序进行排序去重
// 桶排序
function bucketSort(arr) {
const newArr = new Array(1001).fill(0, 0, 1001); // 创建 1000 个桶
for (let i = 0; i < arr.length; i++) {
newArr[arr[i]]++;
}
const sortedArr = [];
for (let i = 0; i < newArr.length; i++) {
if (newArr[i] >= 1) {
sortedArr.push(i);
}
}
console.log('需要购买数量: ' + sortedArr.length); // 打印出需要购买的数量
console.log('序列号: ', sortedArr); // 以及书本的序列号
}
bucketSort(bookISBNList);
通过冒泡排序进行排序去重
// 冒泡排序
function bubbleSort(arr) {
for (let i = 0; i < arr.length - 1; i++) {
for (j = 0; j < arr.length - 1 - i; j++) {
const tmp = arr[j];
if (arr[j] > arr[j + 1]) {
arr[j] = arr[j + 1];
arr[j + 1] = tmp;
}
}
}
const sortedArr = [];
for (let i = 0; i < arr.length; i++) {
if (i === 0) {
sortedArr.push(arr[i]);
} else if (arr[i] !== arr[i - 1]) {
sortedArr.push(arr[i]);
}
}
console.log('需要购买数量: ' + sortedArr.length); // 打印出需要购买的数量
console.log('序列号: ', sortedArr); // 以及书本的序列号
}
bubbleSort(bookISBNList);
通过快速排序进行排序去重
// 快速排序
function sortByQuickSort(arr) {
function quickSort(left, right) {
if (left > right) {
return;
}
const base = arr[left];
let i = left;
let j = right;
while (i != j) {
while (j > i && arr[j] >= base) {
j--;
}
while (i < j && arr[i] < base) {
i++;
}
if (i < j) {
const tmp = arr[j];
arr[j] = arr[i];
arr[i] = tmp;
}
}
arr[left] = arr[i];
arr[i] = base;
quickSort(left, i - 1);
quickSort(i + 1, right);
}
quickSort(0, arr.length);
const sortedArr = [];
for (let i = 0; i < arr.length; i++) {
if (i === 0) {
sortedArr.push(arr[i]);
} else if (arr[i] !== arr[i - 1]) {
sortedArr.push(arr[i]);
}
}
console.log('需要购买数量: ' + sortedArr.length); // 打印出需要购买的数量
console.log('序列号: ', sortedArr); // 以及书本的序列号
}
sortByQuickSort(bookISBNList);