算法-高位优先的字符串排序

简介:

与之前的低位优先的字符串排序不同,低位优先是从右向左开始排序,高位优先是从左向右开始排序,高位优先排序的过程是字符串切分为独立排序的子数组完成排序任务,切分会为每个首字母得到一个子数组,低位优先排序适用于定长字符串的排序,高位优先适用于随机字符串排序,主要实现过程比低位多了一步,就是递归排序.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
static  int   R=26;
 
@implementation MSD
 
-(NSInteger)charAt:(NSString *)str index:(NSInteger)index{
     if  (index<str.length) {
         return  [str characterAtIndex:index]-97;
     } else {
         return  -1;
     }
}
 
-( void )setupData:(NSMutableArray *)dataSource{
     NSInteger  count=[dataSource count];
     self.tempArr=[[NSMutableArray alloc]initWithCapacity:1];
     for  (NSInteger i=0; i<count; i++) {
         [self.tempArr addObject:[NSNull  null ]];
     }
     [self sort:dataSource low:0 high:count-1 index:0];
}
 
-( void )sort:(NSMutableArray *)dataSource low:(NSInteger)low high:(NSInteger)high index:(NSInteger)index{
     if  (high<=low) {
         return ;
     }
     
     NSMutableArray  *count=[[NSMutableArray alloc]initWithCapacity:1];
     for  (NSInteger i=0; i<R+2; i++) {
         [count addObject:[NSNumber numberWithInteger:0]];
     }
     //统计频率
     for  (NSInteger i=low; i<=high; i++) {
         NSInteger  charValue=[self charAt:dataSource[i] index:index];
         count[charValue+2]=[NSNumber numberWithInteger:[count[charValue+2] integerValue]+1];
     }
     for  (NSInteger j=0; j<R+1; j++) {
         count[j+1]=[NSNumber numberWithInteger:[count[j] integerValue]+[count[j+1] integerValue]];
     }
     //将元素从上到下分类
     for  (NSInteger m=low; m<=high; m++) {
         NSInteger  tempIndex=[count[[self charAt:dataSource[m] index:index]+1] integerValue];
         self.tempArr[tempIndex]=dataSource[m];
         count[[self charAt:dataSource[m] index:index]+1]=[NSNumber numberWithInteger:tempIndex+1];
     }
     //重新排序赋值
     for  (NSInteger i=low; i<=high; i++) {
         dataSource[i]=self.tempArr[i-low];
     }
     //递归循环
     for  (NSInteger r=0;r<R;r++) {
         [self sort:dataSource low:low+[count[r] integerValue] high:low+[count[r+1] integerValue]-1 index:index+1];
     }
}
 
@end

代码测试:

1
2
3
4
5
6
MSD *msd=[[MSD alloc]init];
NSMutableArray  *dataSource=[[NSMutableArray alloc]initWithObjects: @"she" , @"girl" , @"he" , @"by" , @"keso" , @"fly" , @"elephant" , @"the" , @"shells" , @"she" , @"sells" , @"are" , @"boy" , @"seachells" ,nil];
[msd setupData:dataSource];
[dataSource enumerateObjectsUsingBlock:^(id  _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
     NSLog( @"%@" ,obj);
}];

测试效果:

本文转自Fly_Elephant博客园博客,原文链接:http://www.cnblogs.com/xiaofeixiang/p/4857130.html,如需转载请自行联系原作者

相关文章
|
11月前
|
机器学习/深度学习 算法 安全
【无人机三维路径规划】基于非支配排序的鲸鱼优化算法NSWOA与多目标螳螂搜索算法MOMSA求解无人机三维路径规划研究(Matlab代码实现)
【无人机三维路径规划】基于非支配排序的鲸鱼优化算法NSWOA与多目标螳螂搜索算法MOMSA求解无人机三维路径规划研究(Matlab代码实现)
437 5
|
11月前
|
机器学习/深度学习 运维 算法
基于非支配排序遗传算法NSGAII的综合能源优化调度(Matlab代码实现)
基于非支配排序遗传算法NSGAII的综合能源优化调度(Matlab代码实现)
508 0
基于非支配排序遗传算法NSGAII的综合能源优化调度(Matlab代码实现)
|
12月前
|
机器学习/深度学习 算法 安全
【无人机3D路径规划】基于非支配排序遗传算法NSGAII的无人机3D路径规划研究(Matlab代码实现)
【无人机3D路径规划】基于非支配排序遗传算法NSGAII的无人机3D路径规划研究(Matlab代码实现)
363 1
|
11月前
|
机器学习/深度学习 算法 安全
【无人机三维路径规划】多目标螳螂搜索算法MOMSA与非支配排序的鲸鱼优化算法NSWOA求解无人机三维路径规划研究(Matlab代码实现)
【无人机三维路径规划】多目标螳螂搜索算法MOMSA与非支配排序的鲸鱼优化算法NSWOA求解无人机三维路径规划研究(Matlab代码实现)
353 0
|
11月前
|
机器学习/深度学习 算法 安全
【微电网】【创新点】基于非支配排序的蜣螂优化算法NSDBO求解微电网多目标优化调度研究(Matlab代码实现)
【微电网】【创新点】基于非支配排序的蜣螂优化算法NSDBO求解微电网多目标优化调度研究(Matlab代码实现)
296 0
|
12月前
|
机器学习/深度学习 算法 安全
【优化调度】基于matlab非支配排序遗传算法求解车辆充电调度优化问题研究(Matlab代码实现)
【优化调度】基于matlab非支配排序遗传算法求解车辆充电调度优化问题研究(Matlab代码实现)
210 0
|
11月前
|
存储 算法 搜索推荐
软考算法破壁战:从二分查找到堆排序,九大排序核心速通指南
专攻软考高频算法,深度解析二分查找、堆排序、快速排序核心技巧,对比九大排序算法,配套动画与真题,7天掌握45%分值模块。
448 1
软考算法破壁战:从二分查找到堆排序,九大排序核心速通指南
|
11月前
|
供应链 算法 Java
【柔性作业车间调度问题FJSP】基于非支配排序的多目标小龙虾优化算法求解柔性作业车间调度问题FJSP研究(Matlab代码实现)
【柔性作业车间调度问题FJSP】基于非支配排序的多目标小龙虾优化算法求解柔性作业车间调度问题FJSP研究(Matlab代码实现)
439 1
|
12月前
|
传感器 并行计算 算法
【无人机编队】基于非支配排序遗传算法II NSGA-II高效可行的无人机离线集群仿真研究(Matlab代码实现)
【无人机编队】基于非支配排序遗传算法II NSGA-II高效可行的无人机离线集群仿真研究(Matlab代码实现)
606 3
|
11月前
|
机器学习/深度学习 算法 安全
【无人机三维路径规划】基于非支配排序的鱼鹰优化算法NSOOA求解无人机三维路径规划研究(Matlab代码实现)
【无人机三维路径规划】基于非支配排序的鱼鹰优化算法NSOOA求解无人机三维路径规划研究(Matlab代码实现)
222 0

热门文章

最新文章