排序算法——桶排序
来源:互联网 发布:无人机pos数据 编辑:程序博客网 时间:2024/06/06 03:48
核心思想:对于被排序的数组,将数组元素记录在新的数组中。记录方法:如果当前元素的值为x,那么新数组newarray[x]这个位置加一。最后按照顺序从新数组中取下标。这个新数组的长度为原数组中元素的最大值。
例如:
nums={1,3,2,5}
新建一个数组长度为5
newarray={0,0,0,0,0}
这个新数组全部放零
第一个元素为1,所以newarray[1]这个位置加一
第二个元素为3,所以newarray[3]这个位置加一
第三个元素为2,所以newarray[2]这个位置加一
第四个元素为5,所以newarray[5]这个位置加一
最后得到一个新数组:
newarray={0,1,1,1,0,1}
在按照顺序取newarray的下标,newarray的值表示取下标的次数,这里由于元素没有重复,所以全部都只取了一次。给出的示例中有元素发生重复的情况。如果newarray[i]的值是0,就跳过这个下标。
取元素后的结果:
result={1,2,3,5}
总结:这种排序方法的优势在于速度很快,比快速排序速度还快。时间复杂度只有O(n),遍历一次数组就能完成排序。缺点在于所占用的存储空间可能会非常大,因为新数组的长度取决于原数组中的最大值,如果原数组中的值比较分散且值比较大,就会造成存储空间的浪费。例如原数组只有两个值0和10000,为了比较这两个值,新数组的长度必须为10000,这就浪费了很多的存储空间。
示例代码:
package algorithms;//桶排序示例public class Example {public static void sortmethod(int nums[]) {int max = nums[0];for (int i = 0; i < nums.length; i++)//先找出数组中最大的数字,确定新数组的长度if (nums[i] > max)max = nums[i];int[] newarray = new int[max + 1];for (int i = 1; i < newarray.length; i++)//新数组全部置零newarray[i] = 0;for (int i = 0; i < nums.length; i++)//更新新数组newarray[nums[i]]++;for (int i = 0; i < newarray.length; i++) {//按照规则从新数组取出数字while (newarray[i] >= 1) {System.out.print(i);newarray[i]--;}}}public static void main(String args[]) {int ex[] = { 1, 3, 2, 4, 6, 2, 5, 7, 9, 3, 3 };sortmethod(ex);}}
0 0
- 排序算法——桶排序
- 排序算法——桶排序
- 排序算法——桶排序
- 排序算法之——桶排序
- 排序算法——桶排序
- 经典排序算法——桶排序
- 排序算法——桶排序
- 【排序算法】——桶排序
- 排序算法——桶排序
- 排序算法——桶排序
- ~排序算法——桶排序~
- 经典排序算法——桶排序
- 排序算法——桶排序、冒泡排序、快速排序、选择排序
- 排序—插入排序算法
- 排序算法—快速排序
- 排序算法—插入排序
- 排序算法—归并排序
- 排序算法—快速排序
- nginx域名跳转
- 曝料“悠百佳加盟”转眼害我散尽家财
- 设计模式-工厂模式
- GridPanel去掉选中行的选中状态
- CDN介绍
- 排序算法——桶排序
- Yii2 利用场景解决一个表单多个模型属性的required问题。
- Spring Boot基础教程10-web应用开发-Servlets, Filters, listeners
- Ubuntu添加开机自动运行程序
- 分享[ASP.NET]//获取日期+时间
- Unable to create Debug Bridge: Unable to start adb server
- Javascript的this用法
- weblogic 启动 报错:Caused by: java.lang.NoSuchMethodError: javax/persistence/OneToMany.orphanRemoval()Z
- 分享[ASP.NET] SQL语句统计每天、每月、每年的数据 编辑:吴立星