算法都一样,到了javascript中只能用js的语法写。算法比较抽象,举个例子吧!比如你现在要吃饭,要烧水,要做饭,要看电影。怎么办呢?你可以先做饭然后吃饭烧水再看电影,但时间花的长,现在如果你先把水烧着,烧水是热水器的事,你就可以做饭了,饭做完了,这时水也烧好了。现在你再一边看电影一边吃饭,这样你就省了很多时间。这两种做法就是两种不同的算法,当然还有其他的做法也就是算法,但是第二种算法肯定是一种好的算法,因为效率比第一种高多了。在编程里,用某种对应的语言把要做的事表达出来就是一种算法,当然我们会想着用最好的算法,所以现在也有算法和数据结构这门学问。
应该是初学者吧。在最初,我也问过这个问题,在学会了使用一些功能以后,就自然明白了,很难说清楚。我把JS理解为,页面的化妆术。我们就是化妆者,通过JS,我们可以把一个页面全我们想要的意思进行渲染,执行相应的功能,生成相应的效果,比如,显示当前系统时间,比如,显示实时信息的更新(通过AJAX)。术语一点说,JS是一种页面脚本,通过执行程序脚本片段,我们可以对页面及页面上的元素进行操作,实现特定的功能与效果。有一些东西,我们用高级编程语言是实现不了的,而用JS,可能几行代码就可搞定。比如,显示当前系统时间等。
先随便了解一些这种类似的说法,自己去实地编写一些小功能。如果你也是WEB开发的朋友,在页面做得多了,页面效果也做得多了,自然会心领神会。
在Web开发中,JavaScript很重要,算法也很重要。下面整理了一下一些常见的算法在JavaScript下的实现,包括二分法、求字符串长度、数组去重、插入排序、选择排序、希尔排序、快速排序、冒泡法等等。仅仅是为了练手,不保证高效与美观,或许还有Bug,有时间再完善吧。1.二分法:
function binary(items,value){
var startIndex=0,
stopIndex=items.length-1,
midlleIndex=(startIndex+stopIndex)>>>1
while(items[middleIndex]!=value &&startIndex
if(items[middleIndex]>value){
stopIndex=middleIndex-1
}else{
startIndex=middleIndex+1
}
middleIndex=(startIndex+stopIndex)>>>1
}
return items[middleIndex]!=value ? false:true
}
2.十六进制颜色值的随机生成:
function randomColor(){
var arrHex=["0","2","3","4","5","6","7","8","9","a","b","c","d"],
strHex="#",
index
for(var i=0i <6i++){
index=Math.round(Math.random()*15)
strHex+=arrHex[index]
}
return strHex
}
一个求字符串长度的方法:
function GetBytes(str){
var len=str.length,
bytes=len
for(var i=0i <leni++){
if(str.CharCodeAt>255){
bytes++
}
}
return bytes
}
3.js实现数组去重:
Array.protype.delRepeat=function(){
var newArray=new Array()
var len=this.length
for(var i=0i <leni++){
for(var j=i+1j <lenj++)
{
if(this[i]==this[j])
{
++i
}
}
newArray.push(this[i])
}
return newArray
}
4.插入排序。所谓的插入排序,就是将序列中的第一个元素看成一个有序的子序列,然后不段向后比较交换比较交换。
function insertSort(arr){
var key
for(var j = 1j <arr.length j++){
//排好序的
var i = j - 1
key = arr[j]
while(i >= 0 &&arr[i] >key){
arr[i + 1] = arr[i]
i --
}
arr[i + 1] = key
}
return arr
}
5.选择排序。其实基本的思想就是从待排序的数组中选择最小或者最大的,放在起始位置,然后从剩下的数组中选择最小或者最大的排在这公司数的后面。
function selectionSort(data)
{
var i, j, min, temp , count=data.length
for(i = 0i <count - 1i++) {
/* find the minimum */
min = i
for (j = i+1j <countj++)
{
if (data[j] <data[min])
{ min = j}
}
/* swap data[i] and data[min] */
temp = data[i]
data[i] = data[min]
data[min] = temp
}
return data
}
6.希尔排序,也称递减增量排序算法。其实说到底也是插入排序的变种。
function shellSort(array){
var stepArr = [1750, 701, 301, 132, 57, 23, 10, 4, 1]//
reverse()在维基上看到这个最优的步长较小数组
var i = 0
var stepArrLength = stepArr.length
var len = array.length
var len2 = parseInt(len/2)
for(i <stepArrLengthi++){
if(stepArr[i] >len2){
continue
}
stepSort(stepArr[i])
}
// 排序一个步长
function stepSort(step){
//console.log(step) 使用的步长统计
var i = 0, j = 0, f, tem, key
var stepLen = len%step >0 ? parseInt(len/step) + 1 : len/step
for(i <stepi++){// 依次循环列
for(j=1/*j <stepLen &&*/step * j + i <len
j++){//依次循环每列的每行
tem = f = step * j + i
key = array[f]
while((tem-=step) >= 0){// 依次向上查找
if(array[tem] >key){
array[tem+step] = array[tem]
}else{
break
}
}
array[tem + step ] = key
}
}
}
return array
}
7.快速排序。其实说到底快速排序算法就系对冒泡排序的一种改进,采用的就是算法理论中的分治递归的思想,说得明白点,它的做法就是:通过一趟排序将待排序的纪录分割成两部分,其中一部分的纪录值比另外一部分的纪录值要小,就可以继续分别对这两部分纪录进行排序不段的递归实施上面两个操作,从而实现纪录值的排序。
function quickSort(arr,l,r){
if(l <r){
var mid=arr[parseInt((l+r)/2)],i=l-1,j=r+1
while(true){
while(arr[++i] <mid)
while(arr[--j]>mid)
if(i>=j)break
var temp=arr[i]
arr[i]=arr[j]
arr[j]=temp
}
quickSort(arr,l,i-1)
quickSort(arr,j+1,r)
}
return arr
}
8.冒泡法:
function bullSort(array){
var temp
for(var i=0i <array.lengthi++)
{
for(var j=array.length-1j >ij--){
if(array[j] <array[j-1])
{
temp = array[j]
array[j]=array[j-1]
array[j-1]=temp
}
}
}
return array
}