Ruby's Louvre

每天学习一点点算法

导航

插入排序

        var insertionSort = function(array){
          //一开始,第一个元素就被认为已排好序了
          //以i为分割,小于i的为排好序的,大于或等于i的部分为待排序的
          for(var i = 1,n = array.length;i < n;i++){
            var tmp = array[i],//取出第一个待排序的元素(比较元素)
            j = i
            while(array[j-1]>tmp){//从后往前遍历排好序的部分
              array[j] = array[j-1];//如果该元素大于比较元素,则把此元素往后挪一下
              j--;
              if(j<=0)break;
            }

            array[j] = tmp;//插入比较元素
          }
           return array;
        }

实现过程

  1. 从第一个元素开始,该元素可以认为已经被排序
  2. 取出下一个元素(下称比较元素),在已经排序的元素序列中从后向前扫描
  3. 如果该元素大于比较元素,将该元素移到下一位置
  4. 重复步骤3,直到找到已排序的元素小于或者等于比较元素的位置
  5. 将比较元素插入到该位置中
  6. 重复步骤2

        var insertionSort = function(array){
          var j, i, tmp,n=array.length;
          for (i=1; i<n; i++, j=i) {
            tmp=array[i];
            while(true)
              if (j-- >= 0 && array[j] > tmp)
                array[j+1]=array[j];
            else
              break;
            array[j+1]=tmp;
          }
          return array;
        }

posted on 2010-01-18 15:00  司徒正美  阅读(758)  评论(2编辑  收藏  举报