zoukankan      html  css  js  c++  java
  • 实习准备——Code

      1 import java.util.Date;
      2 import java.util.GregorianCalendar
      3 /*
      4  *转换时间
      5  *Input:25-Oct-2013 14:00:00
      6  *Output:秒数
      7  *按我的理解,Calendar和Date有如下区别
      8  *Calendar是一个日历,会有年月日星期等等一些日历中的概念
      9  *Date是一个含有日期表示的时间。具体是指时间点
     10  *
     11 */
     12 public static int calendarToSecond(String timeStr){
     13     String time[]=timeStr.split(" ");
     14     
     15     String dmy[]=time[0].split("-");
     16     int day=Integer.parseInt(dmy[0]);
     17     int month=0;
     18     //Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec
     19     if(dmy[1].equals("Jan"))month=1;    
     20     if(dmy[1].equals("Feb")) month=2;
     21     if(dmy[1].equals("Mar")) month=3;
     22     if(dmy[1].equals("Apr")) month=4;
     23     if(dmy[1].equals("May")) month=5;
     24     if(dmy[1].equals("Jun")) month=6;
     25     if(dmy[1].equals("Jul")) month=7;
     26     if(dmy[1].equals("Aug")) month=8;
     27     if(dmy[1].equals("Sep")) month=9;
     28     if(dmy[1].equals("Oct")) month=10;
     29     if(dmy[1].equals("Nov")) month=11;
     30     if(dmy[1].equals("Dec")) month=12;    
     31     int year=Integer.parseInt(dmy[2]);
     32     
     33     String hms[]=time[1].split(":");
     34     int hour=Integer.parseInt(hms[0]);
     35     int minute=Integer.parseInt(hms[1]);
     36     int second=Integer.parseInt(hms[2]);
     37     
     38     Calendar calendar=new GregorianCalendar(year,month-1,day,hour,minute,second);
     39     Date date=calendar.getTime();
     40     String dateStr=String.format("%ts",date);
     41     int seconds=Integer.parseInt(dateStr);
     42     
     43     return seoncds;
     44 }
     45 import java.io.File
     46 import java.io.FileWriter
     47 /*
     48 *存储矩阵
     49 *Input:矩阵
     50 *Output:矩阵文件
     51 */
     52 public static void saveMatrx(int [][]matrix,int num,String filepath){
     53     File file=new File(filepath);
     54     try{
     55         Writer out=null;
     56         out=new FileWriter(file);
     57         StringBuffer buf=new StringBuffer();
     58         for(int i=0;i<num;i++){
     59             for(int j=0;j<num;j++){
     60                 buf.append(matrx[i][j]+" ");            
     61             }
     62             buf.append("
    ");
     63         }
     64         out.write(buf);
     65         out.close();
     66     }catch(Exception e){
     67         e.printStack();
     68     }
     69 }
     70 /*
     71 *二分查找
     72 *Input:要查找的数
     73 *Output:在数组中的位置
     74 *Note:要求数组是有序的,如正序
     75 *时间复杂度:最差O(n),最好O(1),平均O(log2n)
     76 *空间复杂度:无
     77 */
     78 public static int binarySearch(int data[],int n,int value){
     79     int start=1;
     80     int end=n;
     81     int middle=0;
     82     while(start<=end){
     83         middle=(start+end)/2;
     84         if(value>data[middle]){
     85             start=middle+1;
     86         }else if(value<data[middle]){
     87             end=middle-1;
     88         }else{
     89             return middle;
     90         }
     91     }
     92     return 0;//如果没有找到,则返回0,这一点容易忘记!
     93 }
     94 /*
     95 *插入排序之直接插入排序
     96 *Input:乱序数组
     97 *Output:正序数组
     98 *基本思想:前面第一个元素作为有序区,后面的元素不断插入有序区,直到有序区扩展为整个数组
     99 *时间复杂度:
    100        最好:每个元素只需和前面的元素比较一次,所以总的比较次数n-1次,总的移动次数2(n-1),复杂度O(n)
    101        最差:第i个元素需要和前面的i-1个元素+哨兵进行比较,第i个元素比较i次,从第2个元素一直到第n个元素需要被放入到有序区,每做一次比较就需要移动一次记录,复杂度为O(n^2)
    102        平均:第i个元素需要和前面的i-1个元素的一般进行比较,计算类似最差情况,故为O(n^2)
    103 *空间复杂度:O(1),哨兵的位置
    104 *适用情况:数组已基本有序或者数组元素不多的情况
    105 *稳定排序
    106 */
    107 public static void directInsertSort(int data[],int n){
    108     for(int i=2;i<=n;i++){
    109         data[0]=data[i];//设置哨兵
    110         for(int j=i-1;data[0]<data[j],j--){
    111             if(data[0]<data[j]){
    112                data[j+1]=data[j];
    113             }
    114         }
    115         data[j+1]=data[0];
    116     }
    117 }
    118 /*
    119 *交换排序之冒泡排序
    120 *Input:乱序数组
    121 *Output:正序数组
    122 *基本思想:数组的后边为有序区,前面为无序区,每冒一次泡,
    123 *都是无序区的元素两两比较,若第一个元素大于第二个元素,则两个元素进行交换,直到无序区的最大的元素被放到有序区
    124 *时间复杂度:
    125 *      最好:正序,不用进行移动,比较次数是n-1次,故为O(n)
    126 *      最差:逆序,会进行n-1次遍历,第i次遍历,需要比较n-i次,i是从1到n-1的,移动次数是3倍的比较次数,故为O(n^2)
    127 *      平均:时间复杂度与最坏情况同数量级,为O(n^2)
    128 *空间复杂度:O(1),用于交换元素
    129 *稳定排序
    130 */
    131 public static void bubbleSort(int data[],int n){
    132     int exchange=n;//用来标记某一次遍历是否进行了元素的交换,所以,exchange要实时记录交换元素的位置
    133     int bound=exchange;//用来标记每一次遍历的范围
    134     while(exchange){
    135         bound=exchange;
    136         exchange=0;
    137         for(int i=1;i<bound;i++){
    138             if(data[i]>data[i+1]){
    139                 data[0]=data[i];
    140                 data[i]=data[i+1];
    141                 data[i+1]=data[0];
    142                 exchange=i;
    143             }   
    144         }
    145     }
    146 }
    147 /*
    148 *交换排序之快速排序
    149 *Input:乱序数组
    150 *Output:正序数组
    151 *基本思想:每次选定一个轴值,通过比较和移动,为轴值确定最后的位置,使得左边的元素均小于轴值,右边的元素均大于轴值
    152 *时间复杂度:
    153        最好:轴值总是能把元素平均分成两部分。每次划分,假设需要划分的元素个数为i个,则该次划分需要遍历i次,总共需要log2n次划分,故为O(nlog2n);
    154        最差:轴值总是待划分序列中最小的或者最大的,因此,每次划分只得到一个比上次少一个元素的子序列,另一个子序列为空,故为O(n^2);
    155        平均:O(nlog2n)
    156 *空间复杂度:该算法是递归的,则取决于递归的深度
    157        最好:O(log2n)
    158        最差:要进行n-1次递归调用,故为O(n)
    159        平均:O(log2n)
    160 *适用情况:元素个数较多且记录随机排列
    161 *不稳定排序
    162 *快排的平均性能是迄今为止内排序中最好的。快排应用广泛,典型的是UNIX系统调用库函数例程中的qsort函数
    163 */
    164 public static void quickSort(int data[],int start,int end){
    165     if(start<end){
    166         pivot=partition(data,start,end);//一次 划分得到轴值,函数为partition
    167         quickSort(data,start,pivot-1);//递归的对左侧子序列进行快排
    168         quickSort(data,pivot+1,end);//递归的对右侧子序列进行快排
    169     }
    170 }
    171 //划分时是从右侧开始扫描,也就是先j--,再i++
    172 public static int partition(int data[],int start,int end){//没必要每次都把元素总的个数传递进来
    173     int i=start;
    174     int j=end;
    175     while(i<j){//i=j时划分停止
    176         while(i<j&&data[i]<=data[j]){//当两个元素相等时,继续遍历,无需交换
    177             j--;
    178         }
    179         if(i<j){
    180             temp=data[i];
    181             data[i]=data[j];
    182             data[j]=temp;
    183             i++;
    184         }
    185         while(i<j&&data[i]<=data[j]){
    186             i++;
    187         }
    188         if(i<j){
    189             temp=data[i];
    190             data[i]=data[j];
    191             data[j]=temp;
    192             j--;
    193         }
    194     }
    195     return i;//i为轴值的最终位置
    196 }
  • 相关阅读:
    转载: Ubuntu 在命令下,安装中文环境的方法。
    java复制文件范例代码
    Cesium-entiy闪烁范例
    转载:贝塞尔曲线计算公式
    转载: utm坐标和经纬度相互转换
    arcgis 地图如何转到supermap平台
    Linux查看修改文件句柄数
    转载:Linux目录文件的权限查看与修改
    欧拉系统-登陆 SSH 出现 Access Denied 错误
    关于 nodejs sequelize 事务批量拆分
  • 原文地址:https://www.cnblogs.com/honglihome/p/3386347.html
Copyright © 2011-2022 走看看