低位优先的字符串排序相当于是对键索引计数方法的一个扩展,主要用于处理固定长度字符串,比如说手机号,固定电话,银行卡卡号,字符串的长度为N,从右向左开始进行每个键作为值开始遍历,实现比较简单:

-(void)lowSort:(NSMutableArray *)dataSource singleLength:(NSInteger)len
{NSInteger  sourceCount=[dataSource count];NSInteger R=256;NSMutableArray  *tempArr=[[NSMutableArray alloc]initWithCapacity:1];for (NSInteger i=0; i<sourceCount; i++) {[tempArr addObject:[NSNull null]];}for (NSInteger d=len-1; d>=0; d--) {NSMutableArray  *count=[[NSMutableArray alloc]initWithCapacity:1];for (NSInteger i=0; i<R+1; i++) {[count addObject:[NSNumber numberWithInteger:0]];}//统计频率for (NSInteger i=0; i<sourceCount; i++) {NSString  *str=[dataSource objectAtIndex:i];NSInteger  charValue=[str characterAtIndex:d]-48;count[charValue+1]=[NSNumber numberWithInteger:[count[charValue+1] integerValue]+1];}for (NSInteger j=0; j<R; j++) {count[j+1]=[NSNumber numberWithInteger:[count[j] integerValue]+[count[j+1] integerValue]];}//将元素从上到下分类for (NSInteger m=0; m<sourceCount; m++) {NSString  *str=[dataSource objectAtIndex:m];NSInteger  charValue=[str characterAtIndex:d]-48;tempArr[[count[charValue] integerValue]]=dataSource[m];count[charValue]=[NSNumber numberWithInteger:[count[charValue] integerValue]+1];}//重新排序赋值for (NSInteger i=0; i<sourceCount; i++) {dataSource[i]=tempArr[i];}}
}

 代码测试:

        LSD  *lsd=[[LSD alloc]init];NSMutableArray  *dataSource=[[NSMutableArray alloc]initWithObjects:@"12345",@"23456",@"78901",@"89764",@"12345",@"45678",@"89794",@"89754",@"64532",@"69784",nil];[lsd lowSort:dataSource singleLength:7];[dataSource enumerateObjectsUsingBlock:^(id  _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {NSLog(@"%@",obj);}];NSLog(@"技术交流群:%@",@"228407086");NSLog(@"博客园-FlyElephant:http://www.cnblogs.com/xiaofeixiang");

效果如下:

转载于:https://www.cnblogs.com/xiaofeixiang/p/4855578.html

算法-低位优先的字符串排序相关推荐

  1. 算法系列—低位优先的字符串排序(基于键索引计数法)

    原理日后有空补上.今天该回宿舍了- - 此版本可实现相同长度的字符串数组,不同长度稍加改动即可. C++代码如下: #include<iostream> #include <stri ...

  2. 算法(五)——字符串排序

    5.1 字符串排序 本节我们将学习两类完全不同的字符串排序方法. 第一种方法会从右到左检查键中的字符.这种方法一般被称为低位优先(Least-Significant-Digit First,LSD)的 ...

  3. 【JavaScript——牛客网算法No.HJ26】字符串排序(字符串里英文字母按字典顺序重新排列,其他字符保持原位)附:详细排坑经历

    @No.HJ26 字符串排序 @problem description: 编写一个程序,将输入字符串中的字符按如下规则排序. 规则 1 :英文字母从 A 到 Z 排列,不区分大小写. 如,输入: Ty ...

  4. 字符串排序算法:低位优先排序(LSD)

    LSD:低位优先的字符串排序,核心思想就是对字符串的每个字符做一次键索引排序 #include <iostream> #include <utility> #include & ...

  5. 算法-22-字符串的排序算法(四种排序)

    目录 1.字符串 1.1.属性 1.2.字母表 2.字符串排序方法 3.键索引计数法 3.1.第一步:频率统计 3.2.第二步:将频率转换为索引 3.3.第三步:数据分类排序 3.4.第四步:回写排序 ...

  6. 字符串低位优先排序(LSD)和高位优先排序(MSD)原理及C++实现

    前言: 最近正好在学习字符串相关的算法,写了下LSD.MSD以及三向快速排序算法,写完了过后有很大的感触,所以决定把这几天所学习的东西记录下来. 原理: 键索引计数法:         在开始介绍LS ...

  7. 程序员的算法课(10)-字符串排序算法实例(纯代码)

    一.低位优先(Least-Signifcant-Digit First,LSD) 字符串的低位优先排序算法目的就是将一组字符串按照从右到左的顺序依次比较指定索引位置的字符大小并排序.根据上述字符串的分 ...

  8. c++Numerical string sort数字字符串排序的实现算法(附完整源码)

    C++Numerical string sort数字字符串排序的实现算法 C++Numerical string sort数字字符串排序的实现算法完整源码(定义,实现,main函数测试) C++Num ...

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

    编程工作偶尔会遇到一些不常见问题需要处理,学编程处理问题也难免需要熟悉一些算法 以前学习的时候就遇到过一个看似简单的排序算法问题,当时的解决办法是我没有用过的,在此记录一下'' 问题 - 英文字符串排 ...

最新文章

  1. mongodb在mysql中怎么用,mongoDB数据库基本操作
  2. protocol buff
  3. 字符串在内存中的存储——C语言进阶
  4. S2SH框架入门之使用hibernate进行基础的增删改查
  5. 【活动】侬好上海,Microsoft Reactor来啦
  6. 人人皆知Python功能,你还不了解嘛?
  7. java 操作系统 模拟 daima_编写一个程序,利用Java语言模拟操作系统进程调度管理...
  8. 贾跃亭旗下FF公司遭做空 美国机构质疑其造车能力:卖不出一辆FF91
  9. [wine5.0] ubuntu超级详细的wine5.0攻略(安装配置wine、微信、游戏等)
  10. Google搜索 - 世界各国Google网址大全
  11. php 怎么实现空间点赞,【点赞源码】QQ空间自动点赞PHP源码
  12. 数据库学习之MySQL (十一)—— 统计函数 COUNT MIN MAX AVG SUM
  13. 酷的计算机名字,最酷的名字大全,酷一点的QQ名字:愛伱沒商量
  14. 量子化学计算机理,计算量子化学团队
  15. oracle 02085,【DBLINK】“ORA-02085: database link %s connects to %s”故障排查及处理策略两则...
  16. 音视频系列:Webrtc音视频通话
  17. 深度学习--python 读取并显示图片的方法
  18. Android播放音效
  19. 365资讯简报 每日精选12条新闻简报 每天一分钟 知晓天下事10月12日
  20. 数据结构中数据、数据对象、数据元素、数据项之间的关系

热门文章

  1. page,client,offset区别
  2. 记录下Linux难记实用的命令
  3. 幂等和高并发在电商系统中的使用
  4. jquery Fancybox使用教程
  5. FS_S5PC100 UBOOT-2011.12移植,支持DM9000
  6. 一个网站自动化测试程序的设计与实现
  7. MAC地址、IP地址、ARP协议
  8. 数据结构最短路径例题_数据结构算法实验8图的最短路径问题附源代码.doc
  9. ExtClassLoader和AppClassLoader是Launcher类的两个内部类
  10. 后端技术:Spring Boot 项目优化和 JVM 调优,真实有效。