算法学习笔记

1.

比较容易理解的“冒泡排序”的写法:

C语言版:

JS版:


2.

快速排序:

JS版:

 


3.

  使用“尾插法”和“头插法”建立链表: 

    


4.

  使用头插法或者尾插法对单链表进行归并:

    

    


5.

  利用栈匹配括号的算法:

    


6.

KMP算法:


7.

  二叉树的遍历算法:

    

    


8. 二叉排序树BST

- 查找关键字的算法:

- 插入关键字的算法

- 二叉排序树的构造算法


9. 数组循环左移或右移

 1 function reverse(arr, left, right) {
 2     var i, j, temp;
 3     for (i = left, j = right; i < j; ++i, --j) {
 4         temp = arr[i];
 5         arr[i] = arr[j];
 6         arr[j] = temp;
 7     }
 8 }
 9 
10 // 数组循环左移m位
11 function f1 (arr, m) {
12     rear = arr.length - 1;
13     reverse(arr, 0, m - 1);
14     reverse(arr, m, rear);
15     reverse(arr, 0, rear);
16 }
17 
18 // 数组循环右移m位
19 function f2 (arr, m) {
20     rear = arr.length - 1;
21     reverse(arr, 0, rear);
22     reverse(arr, 0, m - 1);
23     reverse(arr, m, rear);
24 }

10. 

 1 // 斐波那契数列函数
 2 function fibonacci(n){
 3     if(n==1||n==2)
 4         return 1;
 5     return fibonacci(n-1)+fibonacci(n-2);
 6 }
 7 
 8 function fibonacci(n) {
 9     if (n === 1 || n === 2)
10         return 1;
11      
12     var a = 1, b = 1, t = 0;
13     while (n > 2) {
14         t = b;
15         b = a + b;
16         a = t;
17         --n;
18     }
19     return b;
20 }

11.

 1 // 题目描述
 2 
 3 // 移除数组 arr 中的所有值与 item 相等的元素,直接在给定的 arr 数组上进行操作,并将结果返回 
 4 // 输入例子:
 5 // removeWithoutCopy([1, 2, 2, 3, 4, 2, 2], 2)
 6 
 7 // 输出例子:
 8 // [1, 3, 4]
 9 
10 function removeWithoutCopy(arr, item) {
11     for(var i=0;i < arr.length;i++){
12         if(arr[i] == item){
13             arr.splice(i,1);
14             i--;
15         }
16     }
17     return arr;
18 }

...

原文地址:https://www.cnblogs.com/forzhaokang/p/4862569.html