当前位置: 首页 > news >正文

程序员内功修炼

2019独角兽企业重金招聘Python工程师标准>>> hot3.png



排序

比较常见的排序算法有:快速排序,选择排序,冒泡排序,计数排序,希尔排序,堆排序,桶排序,外部排序,基数排序。

本博就各个算法的实现特点和适用的特点进行描述


计数排序:

给定一个数组A,数组A中数据的大小有上限和下限。添加两个辅助数组B,C,先将C数组初始化为0,然后遍历A数组,C[ A[ i ] ]++。这样就 可以统计A数组中每个元素值得个数,然后将他们放入C[ A[ i ] ]中,接着为了排序的方便,我们进行如下处理 C[ i ] = C[ i ] + C[ i - 1 ]。这样我们可以通过C [ A[ i ] ]的值查A[ i ] 排第几。具体算法实现如下

Count_sort( A, B, C)

    for i = 0 to k

            C[i] = 0

    for i = 0 to n

            C[ A[ i ] ]++

    for i = 1 to k

            C[ i ] = C[ i - 1 ] + C[ i ]

    for i = 0 to n

            B[ C[ A[ i ] ] ] = A[ i ] 

算法的时间复杂度为O( n ),空间复杂度为O( k + n )。我觉得这个算法的核心是再申请了2个数组,一个长度为k,另一个长度为n.然后统计每个元素的数目,接着对元素进行排序。这个算法的事件复杂度非常低,非常适合于数组元素在某一范围内排序。

计数排序的一个例子http://poj.org/problem?id=1007

插入排序:
插入排序的思想是前n个数已经有序,第n+1个数字加进来的时候的时候只需要考虑插入到前n个数字之中,我想这大概是插入排序的名字的来源吧。

上代码:

void insert_sort(int *a, int n)
{
        int i, j, temp;

        for (i = 1; i < n; i++)
        {
                temp = a[i];
                for (j = i - 1; j >=0 && temp < a[j]; j--)
                        a[j + 1] = a[j];
                a[j + 1] = temp;
        }
}

代码还算比比较清爽吧,数组的第一个元素自然有序,就一个嘛,然后依次插入后边的元素,一次插入一个,每次插入的时候比较和temp的大小,如果比temp大,那么for循环推出,把a[i]放在数组的j + 1位置,插入排序对链表尤其有用。





转载于:https://my.oschina.net/lirongwei/blog/91365

相关文章:

  • Java泛型通配符extends与super
  • linux 自学系列:更改密码、获取帮助
  • HTML5之Canvas绘图——制作渐变式PPT背景
  • DOS命令大全
  • 关于JQuery的基础知识(一)
  • Tomcat启动成功 但是会报错
  • 如何配置yum源
  • 自动创建LAMP架构
  • 手动加密windows文件
  • C#基础知识整理 基础知识(19) 值类型的装箱和拆箱(二)
  • 在RHEL5上安装CouchDB
  • 你还敢用快递邮寄贵重物品吗?
  • 搬到CSDN,两个同时用,以防万一
  • 即时通讯开发
  • jquery 点击函数切换 toggle()
  • ES学习笔记(12)--Symbol
  • gulp 教程
  • Linux各目录及每个目录的详细介绍
  • SpiderData 2019年2月16日 DApp数据排行榜
  • TypeScript实现数据结构(一)栈,队列,链表
  • WinRAR存在严重的安全漏洞影响5亿用户
  • 猴子数据域名防封接口降低小说被封的风险
  • 如何优雅地使用 Sublime Text
  • 专访Pony.ai 楼天城:自动驾驶已经走过了“从0到1”,“规模”是行业的分水岭| 自动驾驶这十年 ...
  • ​RecSys 2022 | 面向人岗匹配的双向选择偏好建模
  • ​TypeScript都不会用,也敢说会前端?
  • # Maven错误Error executing Maven
  • # 计算机视觉入门
  • #LLM入门|Prompt#1.8_聊天机器人_Chatbot
  • (1) caustics\
  • (6)添加vue-cookie
  • (Arcgis)Python编程批量将HDF5文件转换为TIFF格式并应用地理转换和投影信息
  • (C语言)球球大作战
  • (Python) SOAP Web Service (HTTP POST)
  • (Redis使用系列) Springboot 使用redis的List数据结构实现简单的排队功能场景 九
  • (实战)静默dbca安装创建数据库 --参数说明+举例
  • (五)MySQL的备份及恢复
  • (一)Spring Cloud 直击微服务作用、架构应用、hystrix降级
  • (一)使用Mybatis实现在student数据库中插入一个学生信息
  • (原創) 人會胖會瘦,都是自我要求的結果 (日記)
  • (转)Android学习系列(31)--App自动化之使用Ant编译项目多渠道打包
  • (转)菜鸟学数据库(三)——存储过程
  • .NET 表达式计算:Expression Evaluator
  • .net(C#)中String.Format如何使用
  • ::什么意思
  • @JSONField或@JsonProperty注解使用
  • @RequestMapping 的作用是什么?
  • @value 静态变量_Python彻底搞懂:变量、对象、赋值、引用、拷贝
  • [ vulhub漏洞复现篇 ] Apache APISIX 默认密钥漏洞 CVE-2020-13945
  • [2013][note]通过石墨烯调谐用于开关、传感的动态可重构Fano超——
  • [Asp.net mvc]国际化
  • [C puzzle book] types
  • [HackMyVM]靶场Crossbow
  • [Java][算法 双指针]Day 02---LeetCode 热题 100---04~07
  • [leetcode] Multiply Strings