常见算法小结

作者: 字母31 | 来源:发表于2017-04-09 18:18 被阅读0次

排序就是将内容中的关键信息按照递增或者递减的方式进行排列,常见的排序算法有冒泡排序,选择排序,插入排序,希尔排序,快速排序,归并排序等,下面对其中三种进行总结。

1、冒泡排序

冒泡排序就是把小的元素往前调或者把大的元素往后调。比较是相邻的两个元素比较,交换也发生在这两个元素之间。所以,当如果两个元素相等,则不会交换;如果两个相等的元素没有相邻,那么即使通过前面的两两交换把两个相邻起来,这时候也不会交换,所以相同元素的前后顺序并没有改变。冒泡排序时间复杂度最好的情况为O(n),最坏的情况是O(n^2)。

var array = [21, 34, 1, 3, 53, 2]
var i, j, temp
for (i = 0; i < array.length; i++){
    for(j=0;j<array.length-1-i;j++){
        if(array[j]>array[j+1]){
            temp=array[j]
            array[j]=array[j+1]
            array[j+1]=temp
        }
    }
}
console.log(array)
console.log("done")

2、选择排序

选择排序是首先在未排序序列中找到最小元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小元素,然后放到排序序列末尾。以此类推,直到所有元素均排序完毕。时间复杂度为O(n^2),每次都能确定一个元素所在的最终位置,比较次数与初始序列无关。

var array = [21, 34, 1, 3, 53, 2]
var i, j, temp
for (i = 0; i < array.length-1; i++) {
    for (j = i+1; j < array.length; j++) {
        if (array[i] > array[j]) {
            temp = array[i]
            array[i] = array[j]
            array[j] = temp
        }
    }
}
console.log(array)
console.log("done")

3、插入排序

插入排序是在一个已经有序的小序列的基础上,一次插入一个元素。当然,刚开始这个有序的小序列只有1个元素,就是第一个元素。比较是从有序序列的末尾开 始,也就是想要插入的元素和已经有序的最大者开始比起,如果比它大则直接插入在其后面,否则一直往前找直到找到它该插入的位置。如果碰见一个和插入元素相 等的,那么插入元素把想插入的元素放在相等元素的后面。时间复杂度也为O(n^2)。

var array = [21, 34, 2, 3, 53, 1]
var len = array.length;
var temp;
for (var i = 1; i < len; i++) {
    var j = i - 1;
    temp = array[i];
    while (j >= 0 && array[j] > temp) {
        array[j + 1] = array[j];
        j--;
    }
    array[j + 1] = temp;
}
console.log(array)
console.log("done")

小结

一个排序算法的性能不仅与时间和空间复杂度,还得考虑稳定性,及其适应的场景,在不同的场景可以选择不同的排序算法来达到最优的效果。

相关文章

  • 常见算法小结

    排序就是将内容中的关键信息按照递增或者递减的方式进行排列,常见的排序算法有冒泡排序,选择排序,插入排序,希尔排序,...

  • 常见排序算法小结

    最近温习了一下之前学的七七八八的常见排序算法 快速排序 归并排序 插入排序 希尔排序 堆排序 位图排序 冒泡排序 ...

  • 排序算法(常见排序算法小结)

    排序算法经过了很长时间的演变,产生了很多种不同的方法。对于初学者来说,对它们进行整理便于理解记忆显得很重要。每种算...

  • 数据结构&算法

    常见排序算法小结如何判断一个单链表是否有环?程序员必须知道的10大基础实用算法及其讲解排序算法总结 校招常考算法J...

  • 临时缓存

    Learning to rank基本算法小结

  • 面试时常见算法小结

    一些最基本的算法并不限于iOS,在我们大学课本数据结构中就有介绍,这里使用 Swift 语言实现。 参考链接:iO...

  • 贝叶斯

    原理 关于贝叶斯算法的原理,推荐查看朴素贝叶斯算法原理小结,里面讲的非常详细,这里摘录原理小结。 优点 分类效率稳...

  • sklearn 转载

    scikit-learn 线性回归算法库小结scikit-learn 逻辑回归类库使用小结scikit-learn...

  • 数据结构与算法

    常见排序算法 堆排序 算法大全 算法大汇总

  • 算法——常见算法

    记录算法,三篇文章,持续更新,文章本意只是为了方便本人日后查看,如需转载请注明出处 算法——常见算法记录[http...

网友评论

    本文标题:常见算法小结

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