Java-数据结构-排序

1、排序算法说明
1.1 排序的定义
对一序列对象根据某个关键字进行排序。
1.2 术语说明
稳定:如果a原本在b前面,而a=b,排序之后a仍然在b的前面;
不稳定:如果a原本在b的前面,而a=b,排序之后a可能会出现在b的后面;
要排序的内容是一个复杂对象的多个数字属性,且其原本的初始顺序存在意义,那么我们需要在二次排序的基础上保持原有排序的意义,才需要使用到稳定性的算法,例如要排序的内容是一组原本按照价格高低排序的对象,如今需要按照销量高低排序,使用稳定性算法,可以使得想同销量的对象依旧保持着价格高低的排序展现,只有销量不同的才会重新排序。
时间复杂度: 一个算法执行所耗费的时间。
空间复杂度:运行完一个程序所需内存的大小。

对于一个给定的算法,我们要做 两项分析。
第一是从数学上证明算法的正确性
第二是分析算法的时间复杂度。算法的时间复杂度反映了程序执行时间随输入规模增长而增长的量级,在很大程度上能很好反映出算法的优劣与否。
度量一个程序的执行时间通常有两种方法。
一、事后统计的方法

    这种方法可行,但不是一个好的方法。该方法有两个缺陷:
    一是要想对设计的算法的运行性能进行评测,必须先依据算法编制相应的程序并实际运行;
    二是所得时间的统计量依赖于计算机的硬件、软件等环境因素,有时容易掩盖算法本身的优势。

java如何计算程序运行时间

long startTime = System.currentTimeMillis();    //获取开始时间

doSomething();    //测试的代码段

long endTime = System.currentTimeMillis();    //获取结束时间

System.out.println("程序运行时间:" + (endTime - startTime) + "ms");    //输出程序运行时间
第二种是以纳秒为单位计算的。

long startTime=System.nanoTime();   //获取开始时间  

doSomeThing(); //测试的代码段  

long endTime=System.nanoTime(); //获取结束时间  

System.out.println("程序运行时间: "+(endTime-startTime)+"ns"); 

示例代码

public static void main(String[]args){
		  String str="";
		  long starTime=System.currentTimeMillis();
		  //计算循环10000的时间
		  for(int i=0;i<10000;i++){
		   str=str+i;
		  }
		  long endTime=System.currentTimeMillis();
		  long Time=endTime-starTime;
		  System.out.println(Time);
		  StringBuilder bulider=new StringBuilder("");
		  starTime=System.currentTimeMillis();
		  for(int j=0;j<10000;j++){
		   bulider.append(j);
		  }
		  endTime=System.currentTimeMillis();
		  Time=endTime-starTime;
		  System.out.println(Time);
		}

二、事前分析估算的方法

        因事后统计方法更多的依赖于计算机的硬件、软件等环境因素,有时容易掩盖算法本身的优劣。因此人们常常采用事前分析估算的方法。
        

内排序:所有排序操作都在内存中完成;
外排序:由于数据太大,因此把数据放在磁盘中,而排序通过磁盘和内存的数据传输才能进行;

猜你喜欢

转载自blog.csdn.net/wangzijunn/article/details/86301084