桶排序、冒泡排序、快速排序练习

有 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);
Last Updated: 7/27/2019, 1:39:17 PM