各种排序算法的简单描述

    1. 直接选择排序:时间复杂度为O(N²),从数组中选择一个最小元素与首位元素交换,然后从第二个元素到末尾元素之间选择最小元素与第二个元素交换,...。

    2. 堆排序:时间复杂度为O(NlogN),用数组元素构造完全二叉树,调整节点顺序构造二叉堆,对二叉堆采用deleteMin或deleteMax操作得到最后排序结果。

    3. 直接插入排序:时间复杂度为O(N²),举例说明
[2 4 1 3 5] //输入
[2 4 1 3 5] //把第一位看做已经排好序的子数组。选择第二位,与第一位比较,由于4>2,位置正确,无需调整。
[2 4 4 3 5] //选择第三位,与已经排好序的子数组[2 4]从末尾到首位依次比较,所有比第三位大的数往后挪一个位置。
[2 2 4 3 5] //2往后挪一位。
[1 2 4 3 5] //找到合适位置,坐下。
[1 2 4 4 5] //第四位,3,找自己的位置。
[1 2 3 4 5] //找到合适位置,坐下。
[1 2 3 4 5] //最后一位位置刚好合适,排序完成。

    4. 希尔排序:时间复杂度为O(NlogN),设数组长度N,选择正整数增量序列ht=N/2,ht/2,ht/2/2,...,1,对于每一个增量hk,数组下标每距离hk取一个元素,得到一个子数组,一共得到hk个子数组,每个子数组都进行插入排序。

    5. 冒泡排序:时间复杂度为O(N²),举例说明
[3 2 1]  //输入
[3 1 2]  //从后边开始,每次选择两个元素比较,如果逆序,则交换顺序。2、1逆序,交换它们。
[1 3 2]  //所选的两个元素下标各向前移动一位,继续比较。3、1逆序,交换它们。完成一趟比较,最小数为1,已经冒泡到首位
[1 2 3]  //从剩下的元素中继续执行以上步骤,选择次小数冒泡到第二位。总共执行N趟(N为数组长度)

    6. 快速排序:时间复杂度为O(NlogN),举例说明
[7 6 5 4 3 2 1]   //输入,检查数组长度,如果小于一定长度(最小长度是3),则采用直接插入排序。
[1 6 5 4 3 2 7]   //三数排序。三数为首位7、末位1、中间位4
[1 6 5 2 3 4 7]   //枢纽元放倒数第二位。枢纽元为三数中值4
[1 6 5 2 3 4 7]   //下标i从第二位向后移动,停留在大于枢纽元的元素上;
     i        j          // 下标j从倒数第三位向前移动,停留在小于枢纽元的元素上。
[1 3 5 2 6 4 7]   //交换下标为i、j的两元素。
[1 3 5 2 6 4 7]   //继续移动。
        i  j
[1 3 2 5 6 4 7]   //交换。
[1 3 2 5 6 4 7]   //一旦i>=j,停止移动。
        j  i
[1 3 2 4 6 5 7]   //交换下标为i的元素与枢纽元4
[1 3 2 * *  *  *]   //递归枢纽元左边子集...
[* *  *  * 6 5 7]   //递归枢纽元右边子集...

    7. 桶式排序:时间复杂度O(N),要求输入M个数据大小都限制在[0,N]之内,则可用大小为 N 初始化全为0的数组记录每个输入正整数累计出现的次数,输入完成后按序输出。

    8. 归并排序:时间复杂度为O(NlogN),把一个数组对半分成两个子数组,分别把这两个子数组排好序,再把这两个子数组按大小顺序合并到一个新的数组中(方法是同时读取这两个子数组的各一个元素,对比大小,小的数写入新数组中,然后再对比下一对元素,执行同样操作,直到一个子数组读完,就可以把另一个子数组剩下的数全部写入新数组中)。对子数组排序采用递归归并排序方法。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值