java做基数排序-用java的数组使劲编简单还是用c的指针做简单(对c的指针用的很少)

解决方案 »

  1.   

    这是java写的,看起来比较复杂。class Node {
    private String data; // 节点数据
    private Node next; // 下一个节点位置
    public void setData(String data) {
    this.data = data;
    }
    public void setNext(Node next) {
    this.next = next;
    }
    public String getData() {
    return data;
    }
    public Node getNext() {
    return next;
    }
    }class Radixsort {
    private Node list[] = new Node[10]; // 数据分成10组 private Node masterlist, previous; private int numdigits; public void Radixsort() { // 初始化
    masterlist = null;
    previous = null;
    numdigits = 0; for (int i = 0; i < list.length; i++)
    list[i] = new Node();
    } public void add(String data) { // 加入数据方法 Node newNode = new Node(); // 增加一个位置
    if (data.length() > numdigits) // 找出最大位??
    numdigits = data.length();
    newNode.setData(data);
    if (masterlist == null)
    masterlist = newNode; // 加入第一笔
    else
    previous.setNext(newNode);
    previous = newNode;
    } public String list() { // 输出数据方法 Node tmpNode;
    String out = "<table border='1'><tr>";
    tmpNode = masterlist;
    out = out + "<td>数列?热?</td>";
    while (tmpNode != null) {
    out = out + "<td>" + tmpNode.getData() + "</td>";
    tmpNode = tmpNode.getNext();
    }
    out = out + "</tr></table>";
    return out;
    }public String Radix() { // Radix排序方法
    String s=list();
    String out = ""; 
    for(int i= 1;i <= numdigits;i++){ 
    distribute(i); // 分组
    out = out+"<table border='1'><tr><td>第"+i+"次分组</td></tr><tr><td>"+coalesce()+"</td></tr><tr><td>"+list()+"</td></tr></table><hr width='80%'>"; 

    return s+out; 
    } private void distribute(int i) { // 分组分法,i=1,按个位分;i=2,按十位分... Node tmpNode = masterlist;
    for (int j = 0; j < 10; j++) { // 将数据分为十组
    list[j] = new Node();
    } while (tmpNode != null) {
    int j;
    String Data = tmpNode.getData();
    if ((Data.length() - i) < 0) // 找出所要填入的位数
    j = 0; // 当位数不足时
    else
    j = Integer.parseInt(Data.substring((Data.length() - i), (Data
    .length() - i) + 1)); // 计算位数 Node listtmpNode = list[j]; // 找寻list[j]的尾端
    while (listtmpNode.getNext() != null)
    listtmpNode = listtmpNode.getNext(); listtmpNode.setNext(tmpNode); // 将tmpNode连到list[j]的尾端 tmpNode = tmpNode.getNext(); listtmpNode = listtmpNode.getNext(); // 切断尾端的数据 listtmpNode.setNext(null); }
    } private String coalesce() { // 组合方法 String out = "<table border='0' width='100%'>";
    Node tmpNode = new Node(), previous = new Node(), listtmpNode = new Node();
    masterlist = tmpNode;
    for (int j = 0; j < 10; j++) {
    listtmpNode = list[j].getNext(); // 输出数列分组的情况
    out = out + "<tr><td>组" + j + "</td><td>";
    while (listtmpNode != null) { // 输出第j组中的数据
    out = out + "&nbsp;&nbsp;" + listtmpNode.getData();
    listtmpNode = listtmpNode.getNext();
    } out = out + "</td></tr>"; if (list[j].getNext() != null) { // 将十组数据重新合并
    if (masterlist.getData() == null) {
    masterlist = list[j].getNext();
    } else {
    tmpNode = masterlist;
    while (tmpNode.getNext() != null)
    tmpNode = tmpNode.getNext();
    tmpNode.setNext(list[j].getNext());
    }
    } }
    out = out + "</table>";
    return out;
    } public static void main(String args[]) {
    Radixsort r = new Radixsort();
    r.add("421");
    r.add("240");
    r.add("35");
    r.add("532");
    r.add("305");
    r.add("430");
    r.add("124"); String sortresult = r.Radix();
    System.out.println(sortresult);
    }
    }
      

  2.   

    1、你给的代码太凌乱,没几个人愿意看。建议格式化一下,然后用[banUBB]...[/banUBB]把代码引起来。
    2、代码里夹杂了一堆html格式化的东东,和基数排序算法本身无关,导致代码很丑。
    3、你问题问的很怪:c和java是两种语言,你问用哪个,当然是你熟悉哪个用哪个简单。
      

  3.   


      public class A
    {
        public static void main(String[] args){
           System.out.println("看看手工引进来会有格式不");
       }
    }
      

  4.   

    class Node {
    private String data; // 节点数据 private Node next; // 下一个节点位置 public void setData(String data) {
    this.data = data;
    } public void setNext(Node next) {
    this.next = next;
    } public String getData() {
    return data;
    } public Node getNext() {
    return next;
    }
    }class Radixsort {
    private Node list[] = new Node[10]; // 数据分成10组 private Node masterlist, previous; private int numdigits; public void Radixsort() { // 初始化
    masterlist = null;
    previous = null;
    numdigits = 0; for (int i = 0; i < list.length; i++)
    list[i] = new Node();
    } public void add(String data) { // 加入数据方法 Node newNode = new Node(); // 增加一个位置
    if (data.length() > numdigits) // 找出最大位??
    numdigits = data.length();
    newNode.setData(data);
    if (masterlist == null)
    masterlist = newNode; // 加入第一笔
    else
    previous.setNext(newNode);
    previous = newNode;
    } public String list() { // 输出数据方法 Node tmpNode;
    String out = " <table border= '1 ' > <tr >";
    tmpNode = masterlist;
    out = out + " <td >数列?热? </td >";
    while (tmpNode != null) {
    out = out + " <td >" + tmpNode.getData() + " </td >";
    tmpNode = tmpNode.getNext();
    }
    out = out + " </tr > </table >";
    return out;
    } public String Radix() { // Radix排序方法
    String s = list();
    String out = "";
    for (int i = 1; i <= numdigits; i++) {
    distribute(i); // 分组
    out = out + " <table border= '1 ' > <tr > <td >第" + i
    + "次分组 </td > </tr > <tr > <td >" + coalesce()
    + " </td > </tr > <tr > <td >" + list()
    + " </td > </tr > </table > <hr width= '80% ' >";
    }
    return s + out;
    } private void distribute(int i) { // 分组分法,i=1,按个位分;i=2,按十位分... Node tmpNode = masterlist;
    for (int j = 0; j < 10; j++) { // 将数据分为十组
    list[j] = new Node();
    } while (tmpNode != null) {
    int j;
    String Data = tmpNode.getData();
    if ((Data.length() - i) < 0) // 找出所要填入的位数
    j = 0; // 当位数不足时
    else
    j = Integer.parseInt(Data.substring((Data.length() - i), (Data
    .length() - i) + 1)); // 计算位数 Node listtmpNode = list[j]; // 找寻list[j]的尾端
    while (listtmpNode.getNext() != null)
    listtmpNode = listtmpNode.getNext(); listtmpNode.setNext(tmpNode); // 将tmpNode连到list[j]的尾端 tmpNode = tmpNode.getNext(); listtmpNode = listtmpNode.getNext(); // 切断尾端的数据 listtmpNode.setNext(null); }
    } private String coalesce() { // 组合方法 String out = " <table border= '0 ' width= '100% ' >";
    Node tmpNode = new Node(), previous = new Node(), listtmpNode = new Node();
    masterlist = tmpNode;
    for (int j = 0; j < 10; j++) {
    listtmpNode = list[j].getNext(); // 输出数列分组的情况
    out = out + " <tr > <td >组" + j + " </td > <td >";
    while (listtmpNode != null) { // 输出第j组中的数据
    out = out + "&nbsp;&nbsp;" + listtmpNode.getData();
    listtmpNode = listtmpNode.getNext();
    } out = out + " </td > </tr >"; if (list[j].getNext() != null) { // 将十组数据重新合并
    if (masterlist.getData() == null) {
    masterlist = list[j].getNext();
    } else {
    tmpNode = masterlist;
    while (tmpNode.getNext() != null)
    tmpNode = tmpNode.getNext();
    tmpNode.setNext(list[j].getNext());
    }
    } }
    out = out + " </table >";
    return out;
    } public static void main(String args[]) {
    Radixsort r = new Radixsort();
    r.add("421");
    r.add("240");
    r.add("35");
    r.add("532");
    r.add("305");
    r.add("430");
    r.add("124"); String sortresult = r.Radix();
    System.out.println(sortresult);
    }
    }
      

  5.   

    c语言:#include <stdio.h> 
    #include <stdlib.h> 
    int main(void) {  
    int data[10] = {73, 22, 93, 43, 55, 14, 28, 65, 39, 81}; 
    int temp[10][10] = {0};     int order[10] = {0};    
    int i, j, k, n, lsd;         k = 0;     n = 1;    
    printf("\n排序前: "); 
    for(i = 0; i < 10; i++)     
    printf("%d ", data[i]);  
    putchar('\n');     while(n <= 10) {    
    for(i = 0; i < 10; i++) 
    {             lsd = ((data[i] / n) % 10);   
    temp[lsd][order[lsd]] = data[i];    
    order[lsd]++;         }     
    printf("\n重新排列: ");     
    for(i = 0; i < 10; i++) 
    {             if(order[i] != 0)   
    for(j = 0; j < order[i]; j++) 
    {                  
    data[k] = temp[i][j];   
    printf("%d ", data[k]);     
                   k++;             
                   }           
    order[i] = 0;       
    }     
    n *= 10;   
    k = 0;    
    }     
    putchar('\n'); 
    printf("\n排序后: ");
    for(i = 0; i < 10; i++) 
    printf("%d ", data[i]);  
    return 0; } 
      

  6.   

    Java里面你完全可以使用List来做这个事情,不需要自己处理一大堆插入删除的事情,而且已经都有现成快速排序的APICollections.sort(list);