常见排序算法总结——10常用+4整活+2整合

前言

总结复习的时候发现对于部分排序算法的相关知识记得不是特别清楚,因此发文总结一下


一、总结图表+短句回忆

大佬的中间图片
(此图来自于二、1中的大佬,会在那里注明链接)
短句速记(回忆):
冒泡排序:两两交换,冒出最大(小),冒个n-1次
选择排序:选最小,和最前交换,换n-1次
插入排序:列内建新列,逐数按序进新列
希尔排序:分组插入排序
归并排序:二分再二分,递归来排序
快速排序:选基准,定基准,基准两边再基准
堆排序:建大顶堆,换堆顶,排堆底,再建再换再排
计数排序:元素范围我知道,现在只统计元素个数,再重新输出
桶排序:计数排序我升级,元素现在范围统,桶内排序看着办
基数排序:已知最大位数,我从个位开始排

二、常见的10种排序算法的详细总结

1.大佬1号

超详细十大经典排序算法总结(java代码)c或者cpp的也可以明白

2.大佬2号

有用的主要是下面的小结和图
在这里插入图片描述

  1. 从平均时间来看,快速排序是效率最高的,但快速排序在最坏情况下的时间性能不如堆排序和归并排序。而后者相比较的结果是,在n较大时归并排序使用时间较少,但使用辅助空间较多。

  2. 上面说的简单排序包括除希尔排序之外的所有冒泡排序、插入排序、简单选择排序。其中直接插入排序最简单,但序列基本有序或者n较小时,直接插入排序是好的方法,因此常将它和其他的排序方法,如快速排序、归并排序等结合在一起使用。

  3. 基数排序的时间复杂度也可以写成O(d*n)。因此它最使用于n值很大而关键字较小的的序列。若关键字也很大,而序列中大多数记录的最高关键字均不同,则亦可先按最高关键字不同,将序列分成若干小的子序列,而后进行直接插入排序。

  4. 从方法的稳定性来比较,基数排序是稳定的内排方法,所有时间复杂度为O(n^2)的简单排序也是稳定的。但是快速排序、堆排序、希尔排序等时间性能较好的排序方法都是不稳定的。稳定性需要根据具体需求选择。

  5. 上面的算法实现大多数是使用线性存储结构,像插入排序这种算法用链表实现更好,省去了移动元素的时间。具体的存储结构在具体的实现版本中也是不同的。

三、整活算法

1.猴子排序

简单来说就是完全随机打乱,然后再检定是否有序。本质上是利用命运女神的力量(如果有的话),来完成排序。如果未来有这种操纵运气的手段,可以考虑用此消耗空间较小的排序。

/* 判断一个数列是否有序 */
    public boolean isSort(int[] arr){
   
        for (int i = 0; i < arr.length-1; i++) {
   
            if(arr[i+1]<arr[i]){
   
                return false;
            }
        }
        return true;
    }

    public void monkeySort(int[] arr){
   
        int count=0;
        Random random=new Random();
        do{
   
            /* 从待排序数组右边随机抽取一位数与左边进行交换*/
            for 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值