第2次实验——算法基本功 与 综合思考

(1)算法基本功——快速排序

    对文件 largeW.txt中的数据,应用快速排序算法进行排序,并与冒泡排序、归并排序进行时间比较。体验算法复杂度对设计算法的影响。

import java.io.BufferedReader;
import java.io.File;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;

//快速排序
public class QuickSort {  
  
  public static void main(String[] args){  
     		double start_all = System.currentTimeMillis();
    String path = "d:\\largeW.txt";
    ArrayList<Integer> list=read(path); 
    double start = System.currentTimeMillis();
       
    double end = System.currentTimeMillis();
    
    
    QuickSort quickSort = new QuickSort();  
    quickSort.quickSort(list,0,list.size()-1); 
    write(list);
    System.out.println("快速排序写入完成");
    double end_all = System.currentTimeMillis();
    System.out.println("总运行时间为: " + (end_all - start_all)+"毫秒");
  }  
  
  //创建并写入largeW_quick.txt文件
  public static void write(ArrayList<Integer> list) {
    File f = new File("d:\\largeW_quick.txt");
    FileOutputStream fou = null;
    try {
      fou = new FileOutputStream(f, false);// true,设置可追加

      for (int i = 0; i < list.size(); i++) {
        String s = String.valueOf(list.get(i));
        String a = "" + s + "\t\n";
        // byte []bytes=new byte[1024];
        // 如何把string转换byte数组
        fou.write(a.getBytes());

      }
    } catch (Exception e) {
      // TODO: handle exception
      e.printStackTrace();
    } finally {
      try {
        fou.close();
      } catch (Exception e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
      }
    }
  }
   public void quickSort(ArrayList<Integer> list,int first, int end){  
      if(first<end){  
        int pivot = partition(list,first,end);  
        quickSort(list,first,pivot-1);  
        quickSort(list,pivot+1,end);  
      }  
    }	  
  public  int partition(ArrayList<Integer> a, int first , int end){  
    int i = first; int j = end;  
    while(i<j){  
      while(i<j&&a.get(i)<=a.get(j))j--;  
      if(i<j){  
        int temp;  
        temp = a.get(i);  
        a.set(i, a.get(j));  
        a.set(j, temp);  
        i++;  
      }  
      while(i<j&&a.get(i)<=a.get(j))i++;  
      if(i<j){  
        int temp;  
        temp = a.get(j);  
        a.set(j, a.get(i));  
        a.set(i, temp); 
        j--;  
      }  
    }  
      return i ;  
  }  
   
  //读取文件到int数组
  public static ArrayList read(String path) {
    ArrayList<Integer> list = new ArrayList<Integer>();
    BufferedReader input = null;
    try {
      FileReader in = new FileReader(path);
      input = new BufferedReader(in);
      String ss;
      try {
        while ((ss = input.readLine()) != null) {
          String[] s = ss.split("\r\n");
          for (int i = 0; i < s.length; i++) {
            list.add(Integer.parseInt(s[i].trim())); // 将String s中的内容添加到动态数组中
          }
        }
      } catch (IOException e) {
        // TODO 自动生成的 catch 块
        e.printStackTrace();
      }
      in.close();
      input.close();
    } catch (Exception e) {
      // TODO 自动生成的 catch 块
      e.printStackTrace();
    }

    return list;
  }
   
}


(4)实习与工作

    上招聘网站(如 51job、智联招聘)上查看自己感兴趣的职位与要求。作业要求:写下自己感兴趣工作的至少2个岗位名称(如Java程序员、搜索引擎工程师)、工作岗位具体要求、自身目前具备哪些条件、有哪些不足的地方并如何弥补。

答:目前我比较感兴趣的职位有C++和数据挖掘工程师比较感兴趣。

对于C++工程师职位基本要求总结如下:

1、计算机相关专业专科及以上学历。
2、具有三年以上研发经验,独立开发过软件部分模块。
3、熟悉Windows/linux环境下C/C++应用程序开发。
4、精通C++面向对象程序设计,具备有良好的程序编码能力。
5、有较好的数据结构,算法基础。
6、熟悉TCP/IP,能熟练进行Socket网络编程。
7、具备良好的编程习惯和文档规范。
8、了解linux系统者优先。

对于数据挖掘工程师工程师职位基本要求总结如下:

1.熟悉常见的推荐算法。
2.强大的分析问题和解决问题的能力。
3.专业的coding能力和良好设计风格。
4.强大的自我驱动和目标导向。
5.计算机相关专业本科以上学历。
6.精通C/C++,或者Java,会一门脚本语言python/php等。
7.有电商数据挖掘方面经验。

我所具备的硬性条件:

1、具备本科计算机专业学历。

2、对一些简单算法可以熟练写出。

3、做过一个团队合作的C#项目经历。

4、具备良好的编程习惯和文档规范。


我认为自身具有的软条件:

1、接触过各类操作系统和应用软件,有较清晰和明确的设计、把握问题的方向。

2、除专业书籍外对各类图书均有涉猎,考虑问题相对全面。

3、有自己明确的个人目标,具备相应的自学适应能力。


自身条件的不足:

1、对C++没有精通的理解和操作。

2、不熟悉Linux的编程环境。

3、对TCP/IP还不熟悉,不能用Socket网络编程。

4、对于算法思想还没有达到体系认识。

5、没有专业、良好的大型团队项目经验,无电商数据挖掘方面的经验。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值