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

简介:

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

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,如需转载请自行联系原作者

相关文章
|
4月前
|
算法
【算法】二分查找——在排序数组中查找元素的第一个和最后一个位置
【算法】二分查找——在排序数组中查找元素的第一个和最后一个位置
|
4月前
|
算法
【算法】滑动窗口——找到字符串中所有字母异位词
【算法】滑动窗口——找到字符串中所有字母异位词
|
1月前
|
搜索推荐 算法 C语言
【排序算法】八大排序(上)(c语言实现)(附源码)
本文介绍了四种常见的排序算法:冒泡排序、选择排序、插入排序和希尔排序。通过具体的代码实现和测试数据,详细解释了每种算法的工作原理和性能特点。冒泡排序通过不断交换相邻元素来排序,选择排序通过选择最小元素进行交换,插入排序通过逐步插入元素到已排序部分,而希尔排序则是插入排序的改进版,通过预排序使数据更接近有序,从而提高效率。文章最后总结了这四种算法的空间和时间复杂度,以及它们的稳定性。
94 8
|
1月前
|
搜索推荐 算法 C语言
【排序算法】八大排序(下)(c语言实现)(附源码)
本文继续学习并实现了八大排序算法中的后四种:堆排序、快速排序、归并排序和计数排序。详细介绍了每种排序算法的原理、步骤和代码实现,并通过测试数据展示了它们的性能表现。堆排序利用堆的特性进行排序,快速排序通过递归和多种划分方法实现高效排序,归并排序通过分治法将问题分解后再合并,计数排序则通过统计每个元素的出现次数实现非比较排序。最后,文章还对比了这些排序算法在处理一百万个整形数据时的运行时间,帮助读者了解不同算法的优劣。
101 7
|
2月前
|
算法
两个字符串匹配出最长公共子序列算法
本文介绍了最长公共子序列(LCS)问题的算法实现,通过动态规划方法求解两个字符串的最长公共子序列,并提供了具体的编程实现细节和示例。
97 1
两个字符串匹配出最长公共子序列算法
|
2月前
|
搜索推荐 Shell
解析排序算法:十大排序方法的工作原理与性能比较
解析排序算法:十大排序方法的工作原理与性能比较
72 9
|
2月前
|
算法 搜索推荐 Java
数据结构与算法学习十三:基数排序,以空间换时间的稳定式排序,速度很快。
基数排序是一种稳定的排序算法,通过将数字按位数切割并分配到不同的桶中,以空间换时间的方式实现快速排序,但占用内存较大,不适合含有负数的数组。
37 0
数据结构与算法学习十三:基数排序,以空间换时间的稳定式排序,速度很快。
|
2月前
|
算法
❤️算法笔记❤️-(每日一刷-83、删除排序链表中的重复项)
❤️算法笔记❤️-(每日一刷-83、删除排序链表中的重复项)
34 0
|
3月前
|
算法 调度
作业调度算法_先来先服务算法_短作业优先算法_高响应比优先算法
本文介绍了作业调度算法,包括先来先服务(FCFS)、短进程优先(SJF)和高响应比优先(HRRN)算法。通过分析进程的到达时间和所需CPU服务时间,计算进程的开始时间、完成时间、平均周转时间和平均带权周转时间,以评估不同算法的性能。FCFS适合长作业,SJF适合短作业,而HRRN则综合了两者的优点。
130 12
|
2月前
|
存储 算法 搜索推荐
算法进阶之路:Python 归并排序深度剖析,让数据排序变得艺术起来!
算法进阶之路:Python 归并排序深度剖析,让数据排序变得艺术起来!
79 0
下一篇
DataWorks