实习准备——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 }
原文地址:https://www.cnblogs.com/honglihome/p/3386347.html