一个排序算法的时间复杂度和空间复杂度

时间:2008-06-10 08:34:34   来源:论坛整理  作者:  编辑:chinaitzhe
自己写了一个数组排序的类,请哪位大虾帮我分析一个这个算法的时间复杂度和空间复杂度。
这个类的实现方式利用排序二叉树的中序遍历来实现的。谢谢了
Java code





Code highlighting produced by Actipro CodeHighlighter (freeware)

http://www.CodeHighlighter.com/





package csdn;



import java.util.Date;

import java.util.Random;



public class TreeSort {



    public static void main(String[] args) {

        Integer[] ora = new Integer[20];

        Random r = new Random(new Date().getTime());

        for (int i = 0; i < 20; i  ) {

            ora[i] = r.nextInt(1000);

            System.out.printf("%d->", ora[i]);

        }

        System.out.println();

        Tree<Integer> root = sortArray(ora);

        lastOrder(root);

        System.out.println();

    }



    public static <T extends Comparable> void lastOrder(Tree<T> root) {

        if (root != null) {

            if (root.left != null)

                lastOrder(root.left);

            System.out.printf("%d->", root.data);

            if (root.right != null)

                lastOrder(root.right);

        }

    }



    public static <T extends Comparable<T>> Tree<T> sortArray(T[] ora) {

        Tree<T> result = new Tree<T>();

        if (ora.length > 0)

            result.data = ora[0];

        T data;

        Tree<T> temp = result;

        for (int i = 1; i < ora.length; i  ) {

            temp = result;

            data = ora[i];

            while (temp != null) {

                if (data.compareTo(temp.data) <= 0) {

                    if (temp.left != null) {

                        temp = temp.left;

                        continue;

                    } else {

                        temp.left = new Tree<T>();

                        temp.left.data = data;

                        break;

                    }

                } else {

                    if (temp.right != null) {

                        temp = temp.right;

                        continue;

                    } else {

                        temp.right = new Tree<T>();

                        temp.right.data = data;

                        break;

                    }

                }

            }

        }

        return result;

    }

}





class Tree<T extends Comparable> {



    public Tree<T> left  = null;

    public Tree<T> right = null;

    public T       data;

}




代码在jdk1.5下编译运行。
网友回复:时间复杂度.nLog2(n)
因为每次查找位置的时候复杂度是 log2(n)
线性增加,所以乘以n

空间复杂度我不知道怎么算了,因为你没有用到辅助空间,但是你又浪费了一个数组,所以假如有的话,应该是o(n)吧
网友回复:时间复杂度--->".nLog2(n) "
空间复杂度--->"o(n)"
网友回复:最差情况下,比较判定的次数是n*(n-1)/2,这样的话,时间复杂度是不是o(n*n)?
空间复杂度是o(n)应该没问题了。
关键字:一个,排序,算法,时间,复杂度,空间,

文章评论

共有 0 位网友发表了评论 此处只显示部分留言 点击查看完整评论页面