zoukankan      html  css  js  c++  java
  • 八大排序算法思想介绍

    1.插入排序

      *直接插入排序

      *希尔排序

    2.选择排序

      *简单选择排序

      *堆排序

    3.交换排序

      *冒泡排序

      *快速排序

    4.归并排序

    5.基数排序

    不稳定排序:简单选择排序,快速排序,希尔排序,堆排序

    稳定排序:冒泡排序,直接插入排序,归并排序,奇数排序

    image

    一.插入排序

    将第一个和第二个元素排好序,然后将第3个元素插入到已经排好序的元素中,依次类推

    (插入排序最好的情况就是数组已经有序了)


    二.希尔排序

    因为插入排序每次只能操作一个元素,效率低

    元素个数N,取奇数k=N/2,将下标差值为k的数分为一组(一组元素个数看总元素个数决定),在组内构成有序序列,再取k=k/2,将下标差值为k的数分为一组,构成有序序列,直到k=1,然后再进行直接插入排序


    三.简单选择排序

    选出最小的数和第一个数交换,再在剩余的数中又选择最小的和第二个数交换,依次类推


    四.堆排序

    以升序排序为例,利用小根堆的性质(堆顶元素最小)不断输出最小元素,直到堆中没有元素

    1.构建小根堆

    2.输出堆顶元素

    3.将堆低元素放一个到堆顶,再重新构造成小根堆,再输出堆顶元素,以此类推


    五.冒泡排序

    改进1:如果某次冒泡不存在数据交换,则说明已经排序好了,可以直接退出排序

    改进2:头尾进行冒泡,每次把最大的沉底,最小的浮上去,两边往中间靠1


    六.快速排序

    选择一个基准元素,比基准元素小的放基准元素的前面,比基准元素大的放基准元素的后面,这种动作叫分区,每次分区都把一个数列分成了两部分,每次分区都使得一个数字有序,然后将基准元素前面部分和后面部分继续分区,一直分区直到分区的区间中只有一个元素的时候,一个元素的序列肯定是有序的嘛,所以最后一个升序的序列就完成啦


    七.归并排序

    将一个无序的数列一直一分为二,直到分到序列中只有一个数的时候,这个序列肯定是有序的,因为只有一个数,然后将两个只含有一个数字的序列合并为含有两个数字的有序序列,这样一直进行下去,最后就变成了一个大的有序数列


    八.基数排序

    找到最大的数,开个比最大的数大一点的数组,遍历每个元素,某个元素为k,则a[k]++,最好遍历数组a,a[k]等于多少就输出多少个k

    只能处理整型数


  • 相关阅读:
    java 项目自我总结-01 开发环境的搭建
    sql server 导入c#dll
    java 开发自我总结- idea 如何打包spring boot
    如何快速创建多工作页 excel
    运维知识总结
    .net core
    ubuntu安装网易云音乐
    Java中(==)与equals的区别
    Linux压缩打包命令
    文件目录属性
  • 原文地址:https://www.cnblogs.com/yinbiao/p/10700181.html
Copyright © 2011-2022 走看看