读《算法导论》之perface

前段时间开始读《算法导论》一书,第一次在译本软件类书看到这么大篇幅关于数学的内容,在惊讶之余更让我坚定了读完它的信念。虎头蛇尾一直是我的弱点,就像之前看《head first design pattern》一样,看了几章后,因为英语的薄弱,暂停了(不过之后我一定会细细看完的)。所以前言往往是看得最细的,呵呵(有点象中国男篮)。在前言中,主要讲了两个排序算法:插入排序和分治法(快速排序)。于是先写了个小测试,感受了两种算法的时间复杂度:

insertionsort.java

/*
 * 插入排序法
 */
package com.algorithms.www;

public class insertionsort {
 private  ultility ut;
 private int[] Array;
 
 private void ShowArray(){
  ut.PrintArray(Array);
 }
 
 protected void sort(int[] arry)
 {
  int key,j =0;
  for(int i=1;i<=arry.length-1;i++)
  {
   key = arry[i];
   j = i-1;
   
   while((j>=0)&&(arry[j]>key))
   {
    arry[j+1]=arry[j];
    arry[j] = key;
    j--;
   }
  }
 }
 
 public  void Run()
 {
  ut = new ultility();
  Array = ut.GetIntArray(20000,20000);
  ut.StartTime();
  sort(Array);
  System.out.println("耗时:"+ut.GetSeconds()+"毫秒");
  System.out.println("----------------------------------------");
 }
 /**
  * @param args
  */
 public static void main(String[] args) {
  // TODO Auto-generated method stub
  insertionsort is = new insertionsort();
  is.Run();
  is.ShowArray();
 }

}

 

QuickSort.java

/*
 * 快速排序法
 */
package com.algorithms.www;

public class QuickSort {

 private final int Len = 10; //如果数组长度大于Len,则直接使用插入排序
 private insertionsort IsertSorts;
 private  ultility ut;
 private int[] Array;
 
 private void ShowArray(){
  ut.PrintArray(Array);
 }
 
 private void sort(int[] arry,int left,int right)
 {
  if ((arry.length -1)<= 10) {
   IsertSorts.sort(arry);
  }
  else{
   int i = left;
   int j = right;
   int middle = (left+right)/2;
   int Temp = 0;
   do{
    while((arry[i]    while((arry[j]>arry[middle])&&(j>middle)) j--;
    if(i<=j)
    {
     Temp = arry[i];
     arry[i] = arry[j];
     arry[j]=Temp;
     i++;
     j--;
    }
   }
   while(i<=j);
   if(left   if(right>i) sort(arry,i,right);
  }
 }
 
 public  void Run()
 {
  ut = new ultility();
  Array = ut.GetIntArray(20000,20000);
  ut.StartTime();
  sort(Array,0,Array.length-1);
  System.out.println("耗时:"+ut.GetSeconds()+"毫秒");
  System.out.println("----------------------------------------");
 }

 /**
  * @param args
  */
 public static void main(String[] args) {
  // TODO Auto-generated method stub
  QuickSort qs = new QuickSort();
  qs.Run();
  qs.ShowArray();
 }

}

对20000个数进行排序,插入法耗时:5778ms(时间复杂度:n的平方);快速插入法:10ms(时间复杂度:nlogn)

 

posted @   红心李  阅读(183)  评论(0编辑  收藏  举报
编辑推荐:
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
点击右上角即可分享
微信分享提示