java 英文字符串排序_英文字符串排序算法

编程工作偶尔会遇到一些不常见问题需要处理,学编程处理问题也难免需要熟悉一些算法

以前学习的时候就遇到过一个看似简单的排序算法问题,当时的解决办法是我没有用过的,在此记录一下''

问题 - 英文字符串排序

如下几个英文单词或者字母

apple,car, a,family,sky,application,app,baby,back,background,bad,bbbbb,bee,cafe ,cake,care

排序后的结果是

/**

a

app

apple

application

baby

back

background

bad

bbbbb

bee

cafe

cake

car

care

family

sky

**/

规则逻辑

通过结果可知

a 与 app a排前面 (开头字母相同,短的排在前面)

back 与 backgroud back排在前面 (开头字母相同,短的排在前面)

application 与 baby application 排在前面(开头字母不同,从a-z依次排序)

设计实现

a=1 b=2 c=3 d=4 e=5 f=6 g=7 h=8 i=9 j=10

k=11 l=12 m=13 n=14 o=15 p=16 q=17 r=18 s=19 t=20

u=21 v=22 w=23 x=24 y=25 z=26

a代表的是 1

b代表的是 2

z 代表 26 就可以实现初步排序

但是 bbbbb与 bee 两个单词要实现 bee 在前,逻辑该怎么写呢

起初想法是,字母依次比较,bbbbb 与 bee比较的第二个字母的时候, b 与 e 分别代表 2 和 5 所以bbbbb排前面,问题是一个一个字母比较看起来很麻烦,10个单词,10个都要比较

有以下解决方案,都有用到递归

方法一 通过单词获取权重进行排序(当初使用方法)

​bbbbb => b =2 b=2 b=2 b=2 b=2

​bee => b = 2 e =5 e = 5

权重数 Px

Px(bbbbb) = 2 + 2 * 27^-1 + 2 * 27^-2 + 2 * 27^-3 + 2 * 27^-4 = 2.079

Px(bee) = 2 + 5 * 27^-1 + 5 * 27^-2 = 2.192

通过这个计算方式可以获得权重值

Px(bbbbb) < Px(bee)

所以 bbbbb 排在 baby 前面

权重数27

这里为什么是 27 不是26 是考虑到一种情况,会导致排序失败

比如 az 与 b比

你可能感兴趣的:(java,英文字符串排序)