美文网首页
2018-07-13 一些简单的算法案例

2018-07-13 一些简单的算法案例

作者: Armin0202 | 来源:发表于2018-07-13 10:58 被阅读33次

受启于阮一峰老师被黑,得益于今天事情不多,就又看了下排序相关的内容。

/*快速排序*/
/*
 * min -> max
通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,
然后再按此方法对这两部分数据分别进行快速排序,
整个排序过程可以递归进行,以此达到整个数据变成有序序列。
 */
/* 执行函数 */
function quickSort(array) {
  return quick(array, 0, array.length - 1)
}

/* 主函数 */
function quick(array, left, right) {
  let index
  if (array.length > 1) {
    index = partition(array, left, right)
    if (left < index - 1) {
      quick(array, left, index - 1)
    }
    if (index < right) {
      quick(array, index, right)
    }
  }
  return array
}

/* 划分操作函数 */
function partition(array, left, right) {
  const pivot = array[Math.floor((right + left) / 2)]
  let i = left
  let j = right

  while (i < j) {
    while (compare(array[i], pivot) === -1 && i < j) {
      i++
    }
    while (compare(array[j], pivot) === 1 && i < j) {
      j--
    }
    if (i <= j) {
      swap(array, i, j)
      i++
      j--
    }
  }
  return i
}

/* 比较函数 */
function compare(a, b) {
  return a === b ? 0 : a < b ? -1 : 1
}

/* 原地交换函数 */
function swap(array, a, b) {
  [array[a], array[b]] = [array[b], array[a]]
}

/*冒泡排序*/
/*
 * min -> max
冒泡排序算法的运作如下:
比较相邻的元素。如果第一个比第二个大,就交换他们两个。
对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。
针对所有的元素重复以上的步骤,除了最后一个。
持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。
*/
function bubbleSort(array) {
  return bubble(array, 0, array.length - 1)
}

function bubble(array, leftIndex, rightIndex) {
  let activeIndex
  if (array.length > 1) {
    activeIndex = compare(array, leftIndex, rightIndex)
    if (activeIndex > 0) {
      bubble(array, leftIndex, activeIndex)
    }
  }
  return array
}

function compare(array, leftIndex, rightIndex) {
  let i = leftIndex
  let j = leftIndex + 1

  while (i < rightIndex) {
    if (array[i] > array[j]) {
      swap(array, i, j)
    }
    i++
    j++
  }
  return rightIndex - 1
}

/* 交换函数 */
function swap(array, a, b) {
  [array[b], array[a]] = [array[a], array[b]]
}

相关文章

  • 2018-07-13 一些简单的算法案例

    受启于阮一峰老师被黑,得益于今天事情不多,就又看了下排序相关的内容。

  • MurmurHash算法的简单使用案例

    MurmurHash算法介绍 MurmurHash 是一种非加密型哈希函数,适用于一般的哈希检索操作。目前已经被广...

  • 网易微专业-机器学习工程师 百度网盘分享

    课程大纲: 导论 机器学习介绍与算法一览 算法与案例:线性回归与逻辑回归 算法与案例:树模型 算法与案例:支持向量...

  • 一些简单算法

    1、打印0-100之间的素数 2、求两个整数的最大公约数 3、给定一个字符串,输出本字符串中只出现一次并且最靠前的...

  • Java一些简单的递归算法

    么么哒: 分享一些Java中一些简单的小算法 递归算法简单的来说就是自己调用自己,可以把一些复杂的问题转化成类似的...

  • 排序基础(一)

    排序算法 O(n2)的排序算法 为什么要学习O(n2)的排序算法? 基础 编码简单,易于实现,是一些简单场景的首选...

  • 遗传算法实践(一) 非线性函数寻优问题

    前言 本系列总结一些遗传算法的应用案例,主要基于《网络模型与多目标遗传算法》(玄光男 林林 著)一书提到的一些应用...

  • 冒泡排序

    直接上代码 输出结果如下: 简单的算法细节要格外注意 一些简单的算法就要注意细节,越简单越不能大意,细节往往就格外...

  • VueDiff算法的简单分析和一些个人思考

    Diff算法是Vue视图动态改变的核心算法之一 本文包括对Diff算法的简单概括,和我闲的难受对Diff算法的一些...

  • OC实现二分法查找

    本文中使用的配图以及一些案例来源于图解算法一书,借助书中的案例,我使用OC语法实现其中的案例,这样有助于学习OC的...

网友评论

      本文标题:2018-07-13 一些简单的算法案例

      本文链接:https://www.haomeiwen.com/subject/snkjpftx.html