JAVA 计数排序,桶排序
来源:互联网 发布:江南大学校园网络登陆 编辑:程序博客网 时间:2024/05/16 15:54
排序算法分为两种:比较算法、非比较算法
其中比较排序是将要排序内容通过比较数值大小的方法,决定排列顺序。为了降低时间复杂度引入分治,递归等方法。例如:选择排序,插入排序,冒泡排序等基础排序法。
非比较排序法是指通过统计每个数字的个数,或者位置的方法将待排序序列进行排序的算法。其中计数算法,桶排序算法即为非比较算法。
计数算法:计数算法的原理类似于Hash表的原理。建立一张数据表,在表中统计每个数据出现的次数
->[1,2,2,2,3,3,3,3,3,4,4,6] 排序结果显而易见。代码如下:
import java.util.ArrayList;import java.util.List;public class CountSort {public static List<Integer> countSort(int data[]){ //得到数组的最大值与最小值,从而得到数据数组的长度int max = 0;int min = 0;for (int i = 0; i < data.length; i++) {max=data[i]>max?data[i]:max;min=data[i]<min?data[i]:min;}//数据数组装配int[] temp=new int[max-min+1];for (int i = 0; i < data.length; i++) {int aim=data[i];temp[aim-min]=temp[aim-min]+1;}System.out.print("temp:");for (int i = 0; i < temp.length; i++) {System.out.print(temp[i]);}//数据数组到结果返回List<Integer> result=new ArrayList<>();for (int i = 0; i < temp.length; i++) {if(temp[i]!=0){for (int j = 0; j < temp[i]; j++) {result.add(min+i);}}}return result;}public static void main(String[] args) {int a[]=new int[]{1,2,1,3,0,5,1};List<Integer> list=countSort(a);System.out.println();for (int i = 0; i < list.size(); i++) {System.out.print(list.get(i));}}}返回结果:
temp:1311010111235时间负责度为O(n),与基础排序法相比明显降低,但降低时间复杂度的代价是牺牲了空间。该方法使用在数字范围不是很大的情况,否则会浪费大量空间。
桶排序:
桶排序是指根据待排序数组内容建立若干个桶,每个桶代表一个数据范围,当待排序数组中的元素命中了其中某个桶时,将该元素放在桶中。当把所有的元素都放在桶中后,在各自的桶中内部进行排序操作。因为每个桶的范围是数轴递增的,将每个桶直接合并即可得到最后排序。代码:
public static void bucketSort(int[] arr){ int max = Integer.MIN_VALUE; int min = Integer.MAX_VALUE; for(int i = 0; i < arr.length; i++){ max = Math.max(max, arr[i]); min = Math.min(min, arr[i]); } //桶数 int bucketNum = (max - min) / arr.length + 1; ArrayList<ArrayList<Integer>> bucketArr = new ArrayList<>(bucketNum); for(int i = 0; i < bucketNum; i++){ bucketArr.add(new ArrayList<Integer>()); } //将每个元素放入桶 for(int i = 0; i < arr.length; i++){ int num = (arr[i] - min) / (arr.length); bucketArr.get(num).add(arr[i]); } //对每个桶进行排序 for(int i = 0; i < bucketArr.size(); i++){ Collections.sort(bucketArr.get(i)); } System.out.println(bucketArr.toString()); }
阅读全文
0 0
- JAVA 计数排序,桶排序
- Java 排序之 计数排序
- 计数排序Java实现
- 计数排序-java实现
- 计数排序--Java
- 计数排序—Java
- 计数排序 java版
- Java实现计数排序
- Java实现计数排序
- java实现计数排序
- 计数排序(JAVA)
- 鸽巢(计数)排序--java
- Java实现计数排序
- 【java】计数排序 基数排序
- Java 计数排序
- 计数排序java
- 桶排序和计数排序
- 基数排序 计数排序 桶排序
- Levko and Table CodeForces
- 111
- Log4Qt 日志级别
- Hive 实现将时间(时间戳)归到某时间片
- java.lang.NoClassDefFoundError: Failed resolution of: Landroid/support/v4/animation/AnimatorCompatHe
- JAVA 计数排序,桶排序
- 从今天开始
- UIKit Function Reference
- netfix ribbon提供的负载均衡策略
- 关于低版本SQL附加高版本数据库(REEOR:948)的解决方法
- spring cloud服务的注册与发现(Eureka)
- A002-《操作系统:设计与实现(第三版)》学习第二周感想
- 关于JOIN
- AndFix Mac