数字以及字符串的排序

引子

工作中我们经常遇到两种排序场景.

  • 数字排序
  • 字符串排序 (对纯字母字符串排序|对纯数字字符串排序|对汉字字符串排序|对混杂了字母汉字数字特殊字符的字符串排序…)

这涉及到两种不同的排序算法

  • 自然有序/自然排序
  • 字典序/按字母序排序

例如:在自然排序算法中,数字2小于数字10.但是在计算机排序算法中,字符串10小于字符串2,因为10中的第一个数字小于2.

字典序

自然排序没什么好说的,大家都会.主要说一说字典序.
在绝大多数语言中,都提供了比较两个字符串大小的方法,比较的实际上就是两个字符串的字典序。
字典序dictionary order,又称 字母序alphabetical order.原意是表示英文单词在字典中的先后顺序,在计算机领域中扩展成两个任意字符串的大小关系。
在字典中,单词是按照首字母在字母表中的顺序进行排列的,比如alphabeta之前。
当第一个字母相同时,比较两个单词的第二个字母在字母表中的顺序,比如accountadvanced之前,以此类推。

下列单词就是按照字典序进行排列的:

as
aster
astrolabe
astronomy
astrophysics
at
ataman
attack
baa

那么看一下字母表顺序(其实就是ASCII表)

123456789
ABCDEFG HIJKLMN OPQRST UVWXYZ
abcdefg hijklmn opqrst uvwxyz

注意:

  • 字符串排序由两个字符串从左向右遍历遇到的第一个不同的字母决定,而不是由两个串的长度决定.
  • 阿拉伯数字当作数字与字母进行排序时,结果不同.

实际应用

看一些实际问题

一本书的作者有很多,经常可以看到这样一句话"按作者姓氏笔画排序".

有产品给我提需求,按照组织架构首字拼音排序.

按照A-后的数字自然排序

A-45
A-67
A-3
A-9
A-18
A-104
A-23
A-44

先按期号排名,期数相同的按照年龄排名.

按照汉字的编码表排序

mysql中一些容易犯错的排序场景

scene.1 对一个组合串进行基数排序时,最好可以拆分为两个字段存储

SELECT CONCAT(prefix, suffix) FROM items ORDER BY prefix , suffix;
SELECT item_no FROM items ORDER BY CAST(item_no AS UNSIGNED) , item_no

scene.2 比对一下两者的效率.

SELECT CONCAT(prefix, suffix) FROM items ORDER BY prefix , suffix;
SELECT CONCAT(prefix, suffix) as tmp FROM items ORDER BY tmp;

scene.3 排序顺序的默认值陷阱

SELECT prefix, suffix FROM items ORDER BY prefix , suffix DESC ;
等价于:  SELECT prefix, suffix FROM items ORDER BY prefix ASC, suffix DESC ;
不等价于: SELECT prefix, suffix FROM items ORDER BY prefix DESC, suffix DESC ;

参考资料

汉字排序 https://www.cnblogs.com/huahuahu/p/Unicode-zi-fu-chuan-pai-xu-gui-ze-yi-ru-he-que-din.html

mysql中的排序 https://blog.csdn.net/q343509740/article/details/80611637

https://blog.csdn.net/qq_37050329/article/details/86637183#commentBox

数字以及字符串的排序相关推荐

  1. js 中 中文、空格、数字、字符串混合排序

    最近有个需求,需要对后台的数组对象按照某个属性进行排序,属性值可能是 中文.字符串.数字.特殊字符.空字符串,网上大部分都只是针对某一个类型进行排序,在参考这篇博客的基础之上https://blog. ...

  2. JS实现点击表头表格自动排序(含数字、字符串、日期)

    <!DOCTYPE> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta h ...

  3. python字符串去重排序_python实现字符串转数字排序-女性时尚流行美容健康娱乐mv-ida网...

    女性时尚流行美容健康娱乐mv-ida网 mvida时尚娱乐网 首页 美容 护肤 化妆技巧 发型 服饰 健康 情感 美体 美食 娱乐 明星八卦 首页  > 高级搜索 python 取子 字符 串 ...

  4. java实现List/Set集合排序:集合内容是字符串,字符串(包含汉字,英文字母,数字)集合的排序

    java实现List/Set集合排序:集合内容是字符串,字符串(包含汉字,英文字母,数字)集合的排序 工具类如下: package com.acconsys.util;import java.util ...

  5. 数字、字符串、列表类型及常用内置方法

    目录 可变不可变类型 基本数据类型及内置方法 数字类型 整型 浮点型 数字类型总结 字符串类型 字符串类型的常用操作+内置方法 字符串类型总结 列表类型 列表类型的常用操作+内置方法 列表类型总结 可 ...

  6. Freemarker 内置函数 数字、字符串、日期格式化用法介绍

    在用FreeMarker过程中,感觉FreeMarker的字符串,日期,集合等处理能力还是很强大的,上网搜了一些资料,整理如下,以便能帮助大家更熟练的应用Freemarker完成项目开发. 一.Seq ...

  7. 算法--排序--大小写字母数字分离(桶排序思想)

    题目: 对D,a,F,B,c,A,z这个字符串进行排序,要求将其中所有小写字母都排在大写字母的前面,但小写字母内部和大写字母内部不要求有序.比如经过排序之后为a,c,z,D,F,B,A,这个如何来实现 ...

  8. 数字与字符串相关问题

    //1-n整数中1出现的次数:时间复杂度nlog(n),因为数字n的位数为O(log n) int count1OfNumber(int n){int count = 0;while (n){if ( ...

  9. Bailian3729 用set实现字符串的排序和查找【文本处理】

    3729:用set实现字符串的排序和查找 总时间限制: 1000ms 内存限制: 65536kB 描述 输入若干只包含数字的字符串,要求按它们被看作整数时的大小排序,并以从大到小的顺序输出.重复的字符 ...

最新文章

  1. 【Vue】谈Vue的依赖追踪系统 ——搞懂methods watch和compute的区别和联系
  2. 如何用php获取网页表格,PHP获取网页上任意表格中内容的通用程序的制作
  3. 今日arXiv精选 | 34篇顶会论文:CIKM/ ACL/ Interspeech/ ICCV/ ACM MM
  4. mysql 常用优化方案_项目中常用的 19 条 MySQL 优化方案
  5. 使用ActiveMQ支持Spring Integration路由
  6. 你是一直认为count(1)比count(*)效率高么?
  7. c字符串中包含双引号_必须知道的C语言知识细节:单引号和双引号正确用法
  8. Python基础学习笔记三
  9. python是什么意思中文、好学吗-学习python难吗?是不是越低级的程序越难学,越高级的程序越简单?...
  10. 插入排序 java实现
  11. Knoll Light Factory 3.2 for mac完整汉化版|灯光工厂 for mac中文版
  12. 极域电子教室一直显示正在连接教师机解决方法
  13. pandas 第八章 文本数据
  14. ASML公司Q3季度营收27.9亿欧元
  15. 树莓派组网 ad-hoc模式
  16. R语言sem包实现通径分析
  17. 鼠标抖动问题(macbook下安装的win7系统)
  18. python代码桌面壁纸_Python实现设置windows桌面壁纸代码分享
  19. 详解:S锁(读锁)和X锁(写锁)
  20. 控制结构:1.台球游戏

热门文章

  1. 土豆和优酷的视频url转换
  2. HTB靶场系列 linux靶机 Beep靶机
  3. win7 usb无法识别
  4. 3大简历难题,你是否也曾遭遇?
  5. 国科大的计算机水平如何,清华眼中的国科大是什么级别?国科大厉害还是清北厉害?...
  6. 福利 | 精选大咖演讲干货、精华笔记、课件分享(附PPT/视频)
  7. MVVM和MVC的区别,以及MVVM的缺点
  8. oracle中临时表文件,Oracle学习(十二)之管理临时表空间的数据文件
  9. 2022年软件测试面试题大全【含答案】
  10. 批量授权、零售版和OEM的区别