javascrip常用演算法總結

admin發表於2017-04-12

當然這些演算法不僅僅適用於javascript,同樣也適用於其他語言。

下面就簡單列舉一下javascript中常見的一些演算法,需要的朋友可以做一下參考。

一.線性查詢:

比較簡單,屬於入門級的演算法

[JavaScript] 純文字檢視 複製程式碼
//A為陣列,x為要搜尋的值
function linearSearch(A, x) {
  for (var index = 0; index < A.length; index++) {
    if (A[index] == x) {
      return index;
    }
  }
  return -1;
}

二.二分查詢:

又稱折半查詢,適用於已排好序的線性結構。

[JavaScript] 純文字檢視 複製程式碼
//A為已按"升序排列"的陣列,x為要查詢的元素
//返回目標元素的下標
function binarySearch(A, x) {
  var low = 0, high = A.length - 1;
  while (low <= high) {
    var mid = Math.floor((low + high) / 2); //下取整   
    if (x == A[mid]) {
      return mid;
    }
    if (x < A[mid]) {
      high = mid - 1;
    }
    else {
      low = mid + 1;
    }
  }
  return -1;
}

三.氣泡排序:

[JavaScript] 純文字檢視 複製程式碼
//氣泡排序
function bubbleSort(A) {
  for (var i = 0; i < A.length; i++) {
    var sorted = true;
  //注意:內迴圈是倒著來的
    for (var j = A.length - 1; j > i; j--) {
      if (A[j] < A[j - 1]) {
        swap(A, j, j - 1);
        sorted = false;
      }
    }
    if (sorted) {
      return;
    }
  }
}

四.插入排序:

[JavaScript] 純文字檢視 複製程式碼
//插入排序
//假定當前元素之前的元素已經排好序,先把自己的位置空出來,
//然後前面比自己大的元素依次向後移,直到空出一個"坑",
//然後把目標元素插入"坑"中
function insertSort(A) {
  for (var index= 1; index< A.length; index++) {
    var x = A[index];
    for (var j = index- 1; j >= 0 && A[j] > x; j--) {
      A[j + 1] = A[j];
    }
    if (A[j + 1] != x) {
      A[j + 1] = x;
      println(A);
    }
  }
  return A;
}

五.字串反轉:

[JavaScript] 純文字檢視 複製程式碼
//字串反轉(比如:ABC -> CBA)
function inverse(s) {
  var arr = s.split('');
  var index= 0, j = arr.length - 1;
  while (index< j) {
    var t = arr[index];
    arr[index] = arr[j];
    arr[j] = t;
    index++;
    j--;
  }
  return arr.join('');
}

相關文章