多种数组排序方法

超、凢脫俗 2022-12-04 09:23 247阅读 0赞

1.随机生成数据

  1. var a = (function (){
  2. var a = [];
  3. function randomInt(from, to){
  4. return parseInt(Math.random() * (to - from + 1) + from);
  5. }
  6. for (var i = 0; i < 10000; i++){
  7. a.push(randomInt(0, 1000000))
  8. }
  9. return a;
  10. })();

2.插入排序

  1. function insertionSort(){
  2. var date = new Date();
  3. for (var i = 1; i < a.length; i++){
  4. var temp = a[i];
  5. for (var j = i - 1; j >= 0 && a[j] > temp; j--){
  6. a[j + 1] = a[j];
  7. }
  8. a[j + 1] = temp;
  9. }
  10. console.log("插入排序的时间:" + (new Date() - date));
  11. }

3.希尔排序

  1. function shellSort(){
  2. var date = Date.now();
  3. for (var gap = a.length >> 1; gap > 0; gap >>= 1){
  4. for (var i = gap; i < a.length; i++){
  5. var temp = a[i];
  6. for (var j = i - gap; j >= 0 && a[j] > temp; j -= gap){
  7. a[j + gap] = a[j];
  8. // console.log(a[j])
  9. }
  10. a[j + gap] = temp;
  11. console.log(a[i],a[j])
  12. console.log(a)
  13. }
  14. }
  15. console.log("希尔排序的时间:" + (new Date() - date));
  16. }

4.归并

  1. function merge(a, b, lo, mid, hi){
  2. //每次归并前,都需要先把a中的数据copy到b中。
  3. for (var i = 0; i < a.length; i++){
  4. b[i] = a[i];
  5. }
  6. var i = lo, j = mid + 1;
  7. for (var k = lo; k <= hi; k++){
  8. if (i > mid){
  9. a[k] = b[j++];
  10. }else if (j > hi){
  11. a[k] = b[i++];
  12. }else if (b[i] < b[j]){
  13. a[k] = b[i++];
  14. }else{
  15. a[k] = b[j++]
  16. }
  17. }
  18. }

5.归并排序

  1. function sort(a, temp, lo, hi){
  2. if (lo >= hi) return;
  3. var mid = (hi + lo) >> 1;
  4. sort(a, temp, lo, mid); //左半部分排序
  5. sort(a, temp, mid + 1, hi);//右半部分排序
  6. merge(a, temp, lo, mid, hi);
  7. }

6. 快速排序

  1. function quickSort(a, lo, hi){
  2. if (lo >= hi) return;
  3. var j = quickPartition(a, lo, hi);
  4. quickSort(a, lo, j - 1);
  5. quickSort(a, j + 1, hi);
  6. }

7.快速排序的切分

  1. function quickPartition(a, lo, hi){
  2. var i = lo, j = hi + 1; //左右扫描指针
  3. var p = a[lo]; //切分元素
  4. for (; ;){
  5. //扫描左右,检查扫描是否结束,并交换元素
  6. while (a[++i] <= p){
  7. if (i == hi) break;
  8. }
  9. while (a[--j] >= p){
  10. if (j == lo) break;
  11. }
  12. //如果左指针超过了右指针则结束
  13. if (i >= j) break;
  14. //交换左右的元素
  15. exch(a, i, j);
  16. }
  17. //把a[lo]添加到指定的位置
  18. exch(a, lo, j);
  19. return j;
  20. }
  21. function exch(a, m, n){
  22. var temp = a[m];
  23. a[m] = a[n];
  24. a[n] = temp;
  25. }

发表评论

表情:
评论列表 (有 0 条评论,247人围观)

还没有评论,来说两句吧...

相关阅读

    相关 各种数组排序方法

    1、问题描述 数组排序(即按某种特定的顺序排列数据,如升序或降序)是最重要的计算应用之一,银行用帐号对所有的支票进行能够排序,并根据排序结果准备月底的财务报告,学校学生

    相关 多种排序介绍

    排序算法是一种基本并且常用的算法。由于实际工作中处理的数量巨大,所以排序算法 对算法本身的速度要求很高。     而一般我们所谓的算法的性能主要是指算法的复杂度,一般用

    相关 数组排序方法sort()

    在默认情况下,sort()方法按升序排序数组项------即最小的值位于最前面,最大的值排在最后面。为了实现排序,sort()方法会调用toString()转型方法,然后比较得