国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

常見排序及查找算法的JS實現(xiàn)

icattlecoder / 966人閱讀

摘要:冒泡排序臨時交換變量記錄數(shù)組長度計數(shù),記錄一共進行了多少次交換數(shù)組長度為輸出數(shù)組成都外層循環(huán)排序出數(shù)組的的值交換標志內層循環(huán),從底往上冒泡,將小泡浮到位置比較兩個元素大小,并交換位置確定交換標志記錄比較元素的次數(shù)共交換了次輸出數(shù)

1.冒泡排序
function bubbleSort(arr) {
            var temp;                                //臨時交換變量
            let n = arr.length;                      //記錄數(shù)組長度
            let count=0;                             //計數(shù),記錄一共進行了多少次交換
            //document.write("數(shù)組長度為:"+n+"
") //輸出數(shù)組成都 for (let i=0; ii; j-- ) { //內層循環(huán),從底往上冒泡,將小泡浮到arr[i]位置 //alert(0); if (arr[j-1]>arr[j]) { //比較兩個元素大小,并交換位置 temp=arr[j-1]; arr[j-1]=arr[j]; arr[j]=temp; flag=flag+1; //確定交換標志 count=count+1; //記錄比較元素的次數(shù) //console.log(flag); //console.log("共交換了:"+count+"次"); } //console.log(arr) //輸出數(shù)組 } if (flag==0) { //跳出循環(huán) break; } } document.write("冒泡排序執(zhí)行次數(shù)為:"+count+"
") return arr; //返回數(shù)組 }
2.簡單選擇排序
function selectSort(arr) {
        let temp;
        let n = arr.length;
        let count =0;
        for (let i=0; i
3.直接插入排序
function insertSort(arr) {
        let i,j;
        let n= arr.length;
        let count = 0;
        for (i=1; iarr[-1];j--) {  //當i位置前面的值比哨兵小,后移i位置的值,并插入哨兵到原先i位置
                    arr[j+1] = arr[j];
                    arr[j] = arr[-1];
                    count++;
                }
            }
        }
    document.write("直接插入排序執(zhí)行次數(shù)為:"+count);
    return arr;
}
4.希爾排序
function shellSort(arr) {
     let d = arr.length;
     let i;
     let temp; //暫存
     do {
        //設置增量
       d = Math.floor(d / 3) + 1;
       for (i = d ; i < arr.length; i++) {
         if (arr[i] < arr[i - d]) {
           temp = arr[i];
           for (var j = i - d; j >= 0 && temp < arr[j]; j -=d) {
               arr[j + d] = arr[j];
               arr[j] = temp;
           }
         }
       }
     }
     while (d > 1)
     return arr;
    }
5.去重算法
function unique(arr) {
            let brr=[];
            for (let i=0; i
6.快速排序
function partition(arr,low,high) {
        let    temp=arr[low],   //基準值
            changetemp;         //用于交換的臨時變量
        while (low=temp) {  
                high--;
            }               //當從high往前掃時,大于基準值時,high--
            //swap(arr, low, high);   //當從high往前掃時,小于基準值時,交換基準值和arr[high]位置
            changetemp=arr[low];
            arr[low]=arr[high];
            arr[high]=changetemp;
            while(low");
            quick(arr, pivot+1, high);          //對樞軸值后面的序列排序   
        }
        //return pivot;                        //返回樞軸值
        return arr;                            //返回排序后的數(shù)組
    }
7.使用JS方法并將形參減少為僅輸入一個數(shù)組的快排
function quickSort (arr) {
        if (arr.length<=1) {
            return arr;
        }
        let left = [],
            right = [],
            pivotIndex = Math.floor(arr.length/2);
        let pivot = arr.splice(pivotIndex,1)[0];
        for (let i=0; i
8.JS實現(xiàn)歸并排序
function mergeSort (arr) {
    //合并兩個有序數(shù)組為一個數(shù)組
    function merge(left,right) {
        let arr=[];
        while (left.length && right.length) {
            if (left[0] < right[0]) {
                arr.push(left.shift());
            } else {
                arr.push(right.shift());
            }
        }
        return arr.concat(left,right);
    }

    let len=arr.length;
    if (len <= 1) {
        return arr;
    } else {
        let index = Math.floor(len/2),
            left = arr.slice(0,index),
            right = arr.slice(index);
        return merge(mergeSort(left),mergeSort(right));//用遞歸對數(shù)組進行拆分,再返回合并后的數(shù)組
    }
}
9.堆排序
function heapSort(array) {
    var result = array.slice(0);
    function swap(array, i, j) {
        var temp = array[i];
        array[i] = array[j];
        array[j] = temp;
    }

    function maxHeapify(array, index, heapSize) {
        var iMax, iLeft, iRight;
        while (true) {
          iMax = index;
          iLeft = 2 * index + 1;
          iRight = 2 * (index + 1);
          
          if (iLeft < heapSize && array[index] < array[iLeft]) {
              iMax = iLeft;
          }

          if (iRight < heapSize && array[iMax] < array[iRight]) {
              iMax = iRight;
          }

          if (iMax != index) {
              swap(array, iMax, index);
              index = iMax;
          } else {
              break;
          }
        }
    }

    function buildMaxHeap(array) {
        var i, iParent = Math.floor(array.length / 2) - 1;

        for (i = iParent; i >= 0; i--) {
            maxHeapify(array, i, array.length);
        }
    }

    function sort(array) {
        buildMaxHeap(array);

        for (var i = array.length - 1; i > 0; i--) {
            swap(array, 0, i);
            maxHeapify(array, 0, i);
        }
        return array;
    }

        return sort(result);
}
10.JS實現(xiàn)順序查找
function listSearch(arr,data) {
    var result;
    for (var i = 0;i
11.JS實現(xiàn)二分查找
function binarySearch(arr,key) {
    var low = 0,
        high = arr.length-1;
    while (low <= high) {
            var mid = parseInt((low+high)/2);    
            if (key < arr[mid]) {
                high = mid-1;
            } else if (key > arr[mid]) {
                low = mid+1;
            } else {
                return mid;
            }
    }
    return -1;
}
        
12.統(tǒng)計字符串中出現(xiàn)次數(shù)最多的字符
function count(str) {
    var obj = {},
        mostStr = "",
        key;
    for(var i = 0; i obj[mostStr]) {
            mostStr = key
        }
    }
    return [mostStr,obj[mostStr]]
}
13.斐波拉契數(shù)列遞歸寫法
function fibonicco(n) {
    if (n ===1 || n === 2) {
        return 1;
    } else {
        return fibonicco(n-1)+fibonicco(n-2);
    }
}
14.斐波拉契數(shù)列迭代寫法
function fibonicco(n) {
    var a,b,res;
    a = b = res =1;
    for (var i =3; i<=n; i++) {
        res = a+b;
        a = b;
        b = res;
    }
    return res;
}

文章版權歸作者所有,未經(jīng)允許請勿轉載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/83580.html

相關文章

  • JavaScript數(shù)據(jù)結構和算法

    摘要:棧被稱為一種后入先出的數(shù)據(jù)結構。散列使用的數(shù)據(jù)結構叫做散列表。這些操作需要求助于其他數(shù)據(jù)結構,比如下面介紹的二叉查找樹。 前言 在過去的幾年中,得益于Node.js的興起,JavaScript越來越廣泛地用于服務器端編程。鑒于JavaScript語言已經(jīng)走出了瀏覽器,程序員發(fā)現(xiàn)他們需要更多傳統(tǒng)語言(比如C++和Java)提供的工具。這些工具包括傳統(tǒng)的數(shù)據(jù)結構(如鏈表,棧,隊列,圖等),...

    EastWoodYang 評論0 收藏0
  • 前端排序算法總結;前端面試題2.0;JavaScript異步編程

    摘要:與異步編程按照維基百科上的解釋獨立于主控制流之外發(fā)生的事件就叫做異步。因為的存在,至少在被標準化的那一刻起,就支持異步編程了。然而異步編程真正發(fā)展壯大,的流行功不可沒。在握手過程中,端點交換認證和密鑰以建立或恢復安全會話。 1、前端 排序算法總結 排序算法可能是你學編程第一個學習的算法,還記得冒泡嗎? 當然,排序和查找兩類算法是面試的熱門選項。如果你是一個會寫快排的程序猿,面試官在比較...

    aaron 評論0 收藏0
  • 前端排序算法總結;前端面試題2.0;JavaScript異步編程

    摘要:與異步編程按照維基百科上的解釋獨立于主控制流之外發(fā)生的事件就叫做異步。因為的存在,至少在被標準化的那一刻起,就支持異步編程了。然而異步編程真正發(fā)展壯大,的流行功不可沒。在握手過程中,端點交換認證和密鑰以建立或恢復安全會話。 1、前端 排序算法總結 排序算法可能是你學編程第一個學習的算法,還記得冒泡嗎? 當然,排序和查找兩類算法是面試的熱門選項。如果你是一個會寫快排的程序猿,面試官在比較...

    ARGUS 評論0 收藏0
  • 前端排序算法總結;前端面試題2.0;JavaScript異步編程

    摘要:與異步編程按照維基百科上的解釋獨立于主控制流之外發(fā)生的事件就叫做異步。因為的存在,至少在被標準化的那一刻起,就支持異步編程了。然而異步編程真正發(fā)展壯大,的流行功不可沒。在握手過程中,端點交換認證和密鑰以建立或恢復安全會話。 1、前端 排序算法總結 排序算法可能是你學編程第一個學習的算法,還記得冒泡嗎? 當然,排序和查找兩類算法是面試的熱門選項。如果你是一個會寫快排的程序猿,面試官在比較...

    April 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<