桶排序的数组实现和链表实现
来源:互联网 发布:angularjs 读取json 编辑:程序博客网 时间:2024/06/07 18:51
/** * 桶排序的数组实现和链表实现 * 桶排序是一种稳定的算法 * @author shuaicenglou * */public class BucketSort { public static void main(String[] args) { int[] test = {5,4,3,2,1}; linkListBucket(test, 1,5); for(int i:test) System.out.println(i); } /** * 桶排序链表实现 * 适用于复杂对象保存相对位置 * 通过node.down==null?是空不打印:不空打印 * 来改动原数组 * @param array * @param min * @param max */ public static void linkListBucket(int[] array,int min,int max){ //此处应做min与max的大小关系检查,发现不合法立即退出 ListNode head = new ListNode(),point = head; head.var = min; for(int i=min+1;i<=max;i++){ //初始化辅助存储链表 ListNode node = new ListNode(); node.var = i; point.right = node; point = node; } for(int i:array){ point = head; //重置头指针 for(int j=min;j<=max;j++){ if(j==i){ //找到位置 ListNode n = new ListNode(); //为元素创建新节点 n.var = i; ListNode dCache = point; //向下移动的指针 while(dCache.down!=null) dCache = dCache.down; //若元素已重复则执行这一步,没有重复则不会执行 dCache.down = n; } point = point.right; //指针右移 } } int count = 0; //接下来改变原数组 point = head; //重置头指针 for(int j=min;j<=max;j++){ if(point.down!=null){ ListNode dCache = point.down; while(dCache!=null){ array[count++] = dCache.var; dCache = dCache.down; } } point = point.right; } } /** * 不改变原数组,仅在函数中打印辅助存储里的数值 * 辅助空间使用数组,仅适用于int,不适用于复杂对象 * @param array 待排序数组 * @param min 数组中元素的下限 * @param max 数组中元素的上限 */ public static void arrayBucket(int[] array,int min,int max){ //此处应做min与max的大小关系检查,发现不合法立即退出 int size = max-min+2; //此处额外多申请一个空间,将[0]置为下限,方便复制 int[] cache = new int[size]; cache[0] = min; for(int i:array){ int len = i-min; cache[len+1] += 1; } for(int i=1;i<cache.length;i++){ for(int j=0;j<cache[i];j++) System.out.println(cache[0]+i-1); } } /** * 改变原数组的元素顺序,不打印 * @param array * @param min * @param max */ public static void arrayBucket2(int[] array,int min,int max){ int size = max-min+2; int[] cache = new int[size]; cache[0] = min; for(int i:array){ int len = i-min; cache[len+1] += 1; } int count = 0; for(int i=1;i<cache.length;i++){ for(int j=0;j<cache[i];j++) array[count++] = cache[0]+i-1; //min+i-1 } }}class ListNode{ public int var; //值,此处可以是对象或者其他复杂对象 public ListNode right,down; //right相当于next指针,down用于存放值相同但是其他特征不同的对象,保持相对次序,输出时按顺序输出即可保持相对顺序}
阅读全文
0 0
- 桶排序的数组实现和链表实现
- 冒泡升序排序的数组实现和链表实现
- 归并排序--数组和链表的实现
- 测试int和Integer数组的排序/快速排序实现
- 桶排序(Bucket Sort)的数组实现
- 数组和链表的归并排序算法实现(C语言)
- 以链表和数组实现并归排序的区别
- 用链表排序(数组的初级运用链表实现)
- 数组及链表的归并排序(C++实现)
- 栈的数组和链表实现
- 队列的数组和链表实现
- 栈的数组和链表实现
- 堆排序的数组实现
- 递归实现数组的排序
- 伪冒泡排序------数组/链表实现
- 冒泡排序-----数组/链表实现
- 线性表的数组实现和链表实现
- 排序算法的数组实现 -- 桶排序(五)
- nio 读写文件
- something
- hadoop streaming的job中出现IOError: [Errno 32] Broken pipe
- nio 编码解码
- 二叉树遍历
- 桶排序的数组实现和链表实现
- java反射 ClassLoader 和 Class.forName() 的区别
- freetype的lcd多行显示代码分析
- Informatica 学习心得1: Defining a Link Condition
- Apache Kudu 1.4.0 中文文档
- 财富自由之路1
- TableView下拉刷新崩溃
- sql server 中用sql实现两个表之间的inert/delete/update
- 抽象类和接口的区别