文中给出了javascript算法的例子。分享给大家参考,如下:
入门级算法——线性搜索——时间复杂度o(n)——在算法领域相当于HelloWorld。
//线性搜索(入门HelloWorld)//A是数组,x是要搜索的值。函数线性搜索(a,x){ for(var I=0;一.长度;I){ if(A[I]==x){ return I;} } return-1;}二分搜索法(也叫二分搜索法)——适合已经排序的线性结构——时间复杂度O(logN)。
//二分搜索法//A为升序排列的数组,x为要查询的元素//返回目标元素{var low=0,high=A . length-1 }的下标函数二分搜索法(A,x);而(低=高){ var mid=Math.floor((低=高)/2);//舍入if(x==A[mid]){ return mid;} if(x A[mid]){ high=mid-1;} else { low=mid 1;} } return-1;}冒泡排序-时间复杂度o (n 2)。
//冒泡排序函数冒泡排序(a){ for(var I=0;一.长度;I){ var sorted=true;//注意:内循环为(var j=a . length-1;j . I;j - ) { if (A[j] A[j - 1]) { swap(A,j,j-1);sorted=false} } if(已排序){ return}}}选择排序-时间复杂度o (n 2)。
//选择排序//思路:找到最小值的下限,用函数selection sort(a){换取(var I=0;一. a .长度-1;I){ var k=I;for(var j=I ^ 1;长度;j){ if(A[j]A[k]){ k=j;} } if (k!=I){ var t=A[k];A[k]=A[I];a[I]=t;println(A);} }返回A;}插入排序时间复杂度o (n 2)。
//插入排序//假设当前元素之前的元素已经排序完毕,先清空它们的位置,//然后前面比自己大的元素依次向后移动,直到空出一个‘坑’。//然后将目标元素插入‘pit’函数insert short(a){ for(var I=1;一.长度;I){ var x=A[I];for(var j=I-1;j=0 A[j]x;j-){ A[j ^ 1]=A[j];} if(A[j ^ 1]!=x){ A[j ^ 1]=x;println(A);} }返回A;}字符串反转-时间复杂度O(logN)。
//字符串反转(例如:ABC-CBA)函数反转{ Vararr=s . split(');var i=0,j=arr . length-1;while(I j){ var t=arr[I];arr[I]=arr[j];arr[j]=t;我;j-;}返回arr . join(“”);}关于稳定性排名的结论:
基于比较的简单排序算法,即时间复杂度为o(n ^ 2)的排序算法,一般可视为稳定排序,其他高级排序算法,如合并排序、堆排序、桶排序等。(通常这类算法的时间复杂度可以优化到n*LogN),一般可以认为是不稳定排序。
单一链表实现
脚本类型='text/javascript '函数pri