算法分析
来源:互联网 发布:mysql 返回map 编辑:程序博客网 时间:2024/06/15 06:06
桶式排序
在我们生活的这个世界中到处都是被排序过的东东。站队的时候会按照身高排序,考试的名次需要按照分数排序,网上购物的时候会按照价格排序,电子邮箱中的邮件按照时间排序……总之很多东东都需要排序,可以说排序是无处不在。现在我们举个具体的例子来介绍一下排序算法。
特点
1.桶排序是稳定的
2.桶排序是常见排序里最快的一种,比快排还要快…大多数情况下
3.桶排序非 常快,但是同时也非常耗空间,基本上是最耗空间的一种排序算法
步骤解析
例如待排数字[6 2 4 1 5 9]
准备10个空桶,最大数个空桶
[6 2 4 1 5 9] 待排数组
[0 0 0 0 0 0 0 0 0 0] 空桶
[0 1 2 3 4 5 6 7 8 9] 桶编号(实际不存在)
1,顺序从待排数组中取出数字,首先6被取出,然后把6入6号桶,这个过程类似这样:空桶[ 待排数组[ 0 ] ] = 待排数组[ 0 ]
[6 2 4 1 5 9] 待排数组
[0 0 0 0 0 0 6 0 0 0] 空桶
[0 1 2 3 4 5 6 7 8 9] 桶编号(实际不存在)
2,顺序从待排数组中取出下一个数字,此时2被取出,将其放入2号桶,是几就放几号桶
[6 2 4 1 5 9] 待排数组
[0 0 2 0 0 0 6 0 0 0] 空桶
[0 1 2 3 4 5 6 7 8 9] 桶编号(实际不存在)
3,4,5,6省略,过程一样,全部入桶后变成下边这样
[6 2 4 1 5 9] 待排数组
[0 1 2 0 4 5 6 0 0 9] 空桶
[0 1 2 3 4 5 6 7 8 9] 桶编号(实际不存在)
0表示空桶,跳过,顺序取出即可:1 2 4 5 6 9
代码块
代码块语法遵循标准markdown代码,例如:
// 桶式排序- (void)bucketSort:(NSMutableArray*)dataList min:(NSInteger)min max:(NSInteger)max{ // 初始化 桶 NSMutableArray * buckets = [NSMutableArray arrayWithCapacity:max - min]; for (int i = 0; i< max - min; i++) { [buckets addObject:@"0"]; } // 把相应的对象放入对应的桶 for (int i = 0; i < dataList.count; i++) { NSInteger index = [dataList[i] integerValue] - min; NSInteger item = [[buckets objectAtIndex:index] integerValue]; [buckets setObject:[NSString stringWithFormat:@"%d",(int)item+1] atIndexedSubscript:index]; } NSLog(@"1 buckets %@",buckets); // 计算各桶内的元素在有序序列中的位置 for (int i = 1; i < max - min; i++) { NSInteger index = [buckets[i] integerValue] + [buckets[i - 1] integerValue]; buckets[i] = [NSString stringWithFormat:@"%d",(int)index]; } NSLog(@"2 buckets %@",buckets); //// 根据buckets数组中的位置信息将待排序列的各元素放入相应位置 NSMutableArray * temp = [NSMutableArray arrayWithArray:dataList]; for (NSInteger k = dataList.count -1; k>=0; k--) { NSInteger buckIndex = [temp[k] integerValue] -min; NSInteger bucketsObj = [buckets[buckIndex] integerValue]; NSInteger IndexedSubscrip = bucketsObj-1; [dataList setObject:temp[k] atIndexedSubscript:IndexedSubscrip]; [buckets setObject:[NSString stringWithFormat:@"%d",(int)IndexedSubscrip] atIndexedSubscript:buckIndex]; } NSLog(@"3 dataList %@",dataList);}
** 代码写的比较仓促,各位看官看懂 算法即可,勿要强求代码风格
- 算法分析
- 算法分析
- 算法分析
- 算法分析
- 算法分析
- 算法分析
- 算法分析
- 算法分析
- 算法分析
- 算法分析
- 算法分析
- 算法分析
- 算法分析
- 算法分析
- 算法分析
- 算法分析
- 算法分析
- 算法分析
- HTML系列之基础标签(一)
- 网络编程:基于TCP的socket网络传输视频(C++, python)
- c++ builder中的 XMLDocument 类详解(0)
- |BZOJ 1652|区间DP|[Usaco2006 Feb]Treats for the Cows
- 用jdk自带的native2ascii转换中文字符为unicode
- 算法分析
- 写给毕业时的我
- c++ builder中的 XMLDocument 类详解(1)
- 学习记录1-linux下vi简单的几个常用命令
- Linux下应用程序的文件操作函数总结
- 特殊数字 精度问题
- 淘淘商城系列——nginx配置虚拟主机
- 新手UI设计师应该改掉的坏毛病
- Python 字典