链式基数排序

来源:互联网 发布: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
原创粉丝点击