Fork me on GitHub

数据结构和排序算法

1.链表:在链表中每一项中前一个是数值,后一个是next指针,这个指针指向的是下一个项的值,在你想要在整个链表中添加或者删除项的时候,就是改变指针的指向

2.栈 :符合数据项是先进后出

队列:符合数据项是先进先出 类似于现实中排队

3.二叉树:在走二叉树的流程的时候有三种方法:

  先序(根左右) 中序(左根右) 后序(左右根)

这里面可以看一下这个二叉树

 

======================================

1、冒泡排序:

冒泡算法的原理就是:两个之间进行对比,如果前一个比后一个大,则这两个进行交换;反之,不交换;第一次对比完成之后,所有数中最大的一个一定在最后面;然后对比数组长度个次数;这样就成功的实现所有的数字从小到大进行排列了;

var arr = [3, 4, 1, 9, 6, 2, 5];
var temp;
for (var i = 0; i < arr.length; i++) {
     for (var j = 0; j < arr.length; j++) {
         if (arr[j + 1] < arr[j]) {
             temp = arr[j + 1];
             arr[j + 1] = arr[j];
             arr[j] = temp;
         }
    }
}
console.log(arr)

 

2、选择排序

首先在末排序序列中找到最小的元素,存放到排序序列的起始位置,然后在从剩余未排序元素中继续寻找最小的元素,然后放到已排序序列的末尾

var arr = [3, 4, 1, 9, 6, 2, 5];
var min;
var temp;
for (var i = 0; i < arr.length - 1; i++) {
     min = arr[i];
     for (var j = i + 1; j < arr.length; j++) {
         if (arr[j] < min) {
              temp = min;
              min = arr[j];
              arr[j] = temp;
          }
     }
     arr[i] = min;
 }
 console.log(arr)

 

3、快速排序 是目前中比较快速的排序方法

快速排序就是先是设置两个指针 一个是0 一个是最后的那一个。然后以0对应的那个值为标准,将大于这个数的放到右边 小于这个数的放到左边,等循环完之后,这还不是最后的结果;

然后将这个值的左边的重复上面的操作。这个值右边的重复上面的操作;这就完成了,从小到大的排序。

var arr=[1,7,2,3,5,9,6];
function sort(arr){
    //如果数组只是一个
    if(arr.length<=1){return arr;}
    //获取到数组的中间一个项
    var quiotIndex=Math.floor(arr.length/2);
    var quiot=arr.splice(quiotIndex,1)[0];
    //左边和右边的
    var left=[];
    var right=[];
    //循环 将小的放在左边 大的放在右边
    for(var i=0;i<arr.length;i++){
        if(arr[i]<=quiot){
            left.push(arr[i])
        }else{
            right.push(arr[i])
        }
    }
    //递归
    return sort(left).concat(quiot,sort(right))
}
console.log(sort(arr))  

 

 

posted @ 2016-12-06 14:11  zhang_yx  阅读(173)  评论(0编辑  收藏  举报