归并、桶排、基数、计数、希尔排序的具体Java实现

本部分内容包括:归并排序、桶排序、基数排序、计数排序、希尔排序

代码实现:

        见我的github:排序(归并、桶排、基数排序、计数排序)

一、归并排序

设计思路

 1、数组分成两段,每段去排序

 2、排序时判断这两段是否越界,越界停止返回

 3、实行归并

        注意事项:灌装数组的时候,需要注意temp数组的起始位置。

二、桶排序

        设计思路:桶排序就是对一组数据进行区间分类,0~10在一个桶,11-20在一个桶,如此哈希,然后每个桶内进行排序,一般按照进桶的先后顺序进行插入排序,所以,桶排序一般采用hash的数据结构,类似下图:

1、创建桶

2、找出最大最小值(设置array[0]存最大值,array[1]存最小值),并确定桶的间距

3、桶的间距加1是为了向上取整

4、哈希数据(哈希之后使用插入排序,对桶内进行排序)

5、整理为数组并返回

        注意事项:桶的间距加1是为了向上取整

三、基数排序

        设计思路:首先进行数据预处理(包括数组判空、边界判断、找出基数排序的位数),再进行基数排序(按照位数进行循环排序、再根据桶内数据统计合并)

1、数据预处理

1.1、数组判空

1.2、边界判断

1.3、找出基数排序的位数

2、基数排序

2.1、按照位数进行循环排序

2.2、根据桶内数据统计合并

        注意事项:不能节省1处的--至2处,1处在循环体内,不判断不执行,但是2处的每次判断均会执行。

四、计数排序

        设计思路:两个数组,一个是原始数组,另外一个是统计数组(在一次循环内统计原始数组中每个数出现的次数)。

1、找出原始数组的最大最小值

2、定义新的数组大小  min到max之间,闭区间,有(max-min+1)个数字

3、一次循环统计数据——优化掉最小值之前的无用存储

4、返回新数组

4.1、优化前方案——两次循环,需判空,浪费循环次数

4.2、优化后方案

        注意事项:数组内的元素跨度大,不适合使用计数排序。

 

五、希尔排序

  设计思路:

1、将一个数组,分成k组,每组自身进行排序,然后缩小分组量,再排序,直到分组量到1,即全排序

2、在每个分组内,我们从头排到尾

3、每个单独的队伍,我们采用插入排序

  注意事项:

见图片的注释部分

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值