链式基数排序
来源:互联网 发布:spss软件怎样转换数据 编辑:程序博客网 时间:2024/06/08 17:39
链式基数排序的原理个人认为是加权排序,将输入的数字堪称数字序列,通过对每一个对应位的数字进行加权,即乘上其所在位的倍数——视为加权,来依次从右向左对权进行排列。如:821和650,1和0乘以权值1(个位),1>0,此时暂时认为821”>”950;接下来2和5乘以权值10(十位),20<50,此时认为50弥补了之前1>0的状况,暂认为821”<”950;最后,8和6乘以权值100(百位),800>600,800又弥补了之前20<50的状况,故最后确定821>650。
以下是代码:
import java.util.Scanner;public class ListRadixSort { private int number; private ListRadixSort next; private static int index = 9; private static ListRadixSort[] list = new ListRadixSort[10]; //链数组 private static ListRadixSort pointList = null; //链表 private static ListRadixSort point = null; //随机指针 private static int count; //最大位数 public ListRadixSort(){} public ListRadixSort(int number,ListRadixSort next){ this.number = number; this.next = next; } public static void main(String[] args) { ListRadixSort object = new ListRadixSort(); int i; for(i=0;i<10;i++){ list[i] = new ListRadixSort(0,null); list[i].number = i; } Scanner scanner = new Scanner(System.in); System.out.print("请告诉我待排序数最大的有多少位:"); count = scanner.nextInt(); int temp = 0,singel = 0; //初始化同时第一次按个位排序 for(i=0;i<index;i++){ if(scanner.hasNextInt()) temp = scanner.nextInt(); singel = temp % 10; point = list[singel]; while(point.next != null) point = point.next; point.next = new ListRadixSort(temp, null); } scanner.close(); object.retList(); //排完返回到链表中 //按位排序 int index = count; count--; while(count != 0){ while(pointList != null){ temp = pointList.number; singel = (temp % (int)Math.pow(10,index+1-count) -temp % (int)Math.pow(10,index-count))/(int)Math.pow(10,index-count); point = list[singel]; while(point.next != null) point = point.next; point.next = pointList; pointList = pointList.next; point.next.next = null; } object.retList(); count--; } while(pointList != null){ System.out.print(pointList.number+" "); pointList = pointList.next; } } public void retList(){ ListRadixSort node = null; for(int i=0;i<10;i++){ point = list[i]; if(pointList == null){ pointList = point.next; node = pointList; } else{ while(node.next != null) node = node.next; node.next = point.next; } point.next = null; } }}
1 0
- 链式基数排序
- 链式基数排序
- 链式基数排序
- 链式基数排序
- 基数排序--链式基数排序(Radix)
- 基数排序与链式基数排序
- 链式队列实现基数排序
- 排序-链式基数排序
- 数据结构——链式基数排序
- C++代码,数据结构-内部排序-基数排序-链式基数排序
- 数据结构_内部排序_链式基数排序
- 【数据结构】算法10.15-10.17 链式基数排序
- 数据结构 JAVA描述(十二) 归并排序 链式基数排序
- 【Data_Structure笔记7】排序算法之【链式基数排序】
- 基数排序
- 基数排序
- 基数排序
- 基数排序
- listView适配器中getView的问题
- Ubuntu下deb包的安装方法
- c++对象内存的分配
- Ext JS 6学习文档–第1章–ExtJS入门指南
- nodejs中使用HTTP分块响应和定时器示例
- 链式基数排序
- 深入剖析ReentrantLock公平锁与非公平锁源码实现
- I-蟠桃记
- eclipse中jsp文件修改浏览器没有同步,问题之解决
- Java设计模式《五》工厂方法模式
- linux内核及其模块的查询,加载,卸载
- POJ 2387 Til the Cows Come Home (最短路)
- 1的个数
- Python学习之iterable&iterator