计科1111-1114班第二次实验作业(算法基本功 与 综合思考)

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

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


package ceshi;


import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;


public class test {
static int len=0;
public static void bubbleSort(String bssz[]) throws IOException
{
int comp=0;
String a=" ";
 for(int i =0;i <len-1;i++)
 {  
       for(int j =i+1;j<len;j++)
       {  
           comp=bssz[i].compareTo(bssz[j]);  
           if(comp>0)
           {  
               a=bssz[i];  
               bssz[i]=bssz[j];  
               bssz[j]=a;  
           }  


       } 
 }
 FileWriter fw =new FileWriter("F:\\largeW_bubble.txt");  
          BufferedWriter writer =new BufferedWriter(fw);  
          for(int i=0;i<len;i++){  
              writer.write(bssz[i]+"\r");  
              writer.newLine();
          }  
 writer.flush();
 writer.close();
}
public static void partition(String[] arr,int head,int tail) throws IOException{  
       if(head < tail){  
           int mid = (head+tail )/2;  
           partition(arr,head,mid);
           partition(arr,mid+1,tail);
           mergeSort(arr,head,tail,mid);  
       }  
   }  
         
 
   public static void mergeSort(String[] arr,int head,int tail,int mid) throws IOException{  
       String[] tArr = new String[tail];
       int tArrIndex = 0;  
       int part1ArrIndex = head;
       int part2ArrIndex = mid+1;
       int l;  
             
       while((part1ArrIndex <= mid)&&(part2ArrIndex <= tail)){ 
           l = arr[part1ArrIndex].compareTo(arr[part2ArrIndex]);
           if(l < 0){  
               tArr[tArrIndex ++] = arr[part1ArrIndex ++];  
           }  
           else{  
               tArr[tArrIndex ++] = arr[part2ArrIndex ++];  
           }  
       }  
             
       while(part1ArrIndex < mid){  
           tArr[tArrIndex ++] = arr[part1ArrIndex ++];  
       }  
             
       while(part2ArrIndex < mid){  
           tArr[tArrIndex ++] = arr[part2ArrIndex ++];  
       }  
       
       FileWriter fw1=new FileWriter("F:\\largeW_merge.txt");  
       BufferedWriter writer1=new BufferedWriter(fw1);  
       for(int i=0;i<len;i++){  
           writer1.write(arr[i]+"\r");  
           writer1.newLine();
       }  
writer1.flush();
writer1.close();


      
   }  


   public static int Partition(int a[],int p,int r){
int x=a[r-1];
int i=p-1;
int temp;
   for(int j=p;j<=r-1;j++){
    if(a[j-1]<=x){
    // swap(a[j-1],a[i-1]);
    i++;
    temp=a[j-1];
    a[j-1]=a[i-1];
    a[i-1]=temp;


}
   }
   //swap(a[r-1,a[i+1-1]);
   temp=a[r-1];
   a[r-1]=a[i+1-1];
   a[i+1-1]=temp;
   
   return i+1;


}

public static void QuickSort(int a[],int p,int r) throws IOException{

if(p<r){
int q=Partition(a,p,r);
QuickSort(a,p,q-1);
QuickSort(a,q+1,r);

}
    FileWriter fw1=new FileWriter("F:\\largeW_quick.txt");  
      BufferedWriter writer1=new BufferedWriter(fw1);  
      for(int i=0;i<len;i++){  
          writer1.write(a[i]+"\r");  
          writer1.newLine();
      }  
writer1.flush();
writer1.close();

}




         
public static void main(String args[]) throws IOException
{
BufferedReader ip = new BufferedReader(new FileReader("F:\\largeW.txt"));
while((ip.readLine())!=null)
{
len++;
}
ip.close();
        
String[] sz=new String[len];
FileReader FR1 =new FileReader("F:\\largeW.txt");  
        BufferedReader BR1=new BufferedReader(FR1);  
        String a=" ";
    int t=0;
        while((a=BR1.readLine()) !=null){  
            sz[t]=a;  
            t++;  
        }  
      
        long startTime =System.currentTimeMillis();
        bubbleSort(sz);  
        long endTime =System.currentTimeMillis();
        System.out.println("冒泡排序运行时间: "+(endTime -startTime) +"ms");  
          
        
        long startTime1=System.currentTimeMillis();
        partition(sz,0,len-1);  
        long endTime1=System.currentTimeMillis();
        System.out.println("归并排序运行时间: "+(endTime1-startTime1)+"ms");  
        
        int in[]=new int[len];
        for(int q=0;q<len;q++)
        {
        in[q]=Integer.parseInt(sz[q]);
        }
        long startTime2=System.currentTimeMillis();
       QuickSort(in,1,len-1); 
       long endTime2=System.currentTimeMillis();
       System.out.println("快速排序运行时间: "+(endTime1-startTime1)+"ms"); 
      
     
}
}



由于数据过多,运行了很久都还没出结果,所以就不上传结果了。

经小型数据测试,代码可行。



2)经典算法面试题(至少选择其中1道题并作答,有自己的思考与理解)

1.有一个整数数组,请求出两两之差绝对值最小的值,记住,只要得出最小值即可,不需要求出是哪两个数。

答:先进行排序,得到一个有序数列a[],然后a[0]减a[1],a[1]-a[2],……一直下去。

虽然这不是一个最快的方法,但我的能力之内只能想到这样。



2.在排序数组中,找出给定数字的出现次数,比如 [1, 2, 2, 2, 3] 中2的出现次数是3次。

答:可以先用二分法先确定一个区间,然后在区间里遍历比较,用给定的数字减去待遍历的数据,小于的时候继续查找,等于0时计数器count+1,大于的时候结束,输出count。

Python网络爬虫与推荐算法新闻推荐平台:网络爬虫:通过Python实现新浪新闻的爬取,可爬取新闻页面上的标题、文本、图片、视频链接(保留排版) 推荐算法:权重衰减+标签推荐+区域推荐+热点推荐.zip项目工程资源经过严格测试可直接运行成功且功能正常的情况才上传,可轻松复刻,拿到资料包后可轻松复现出一样的项目,本人系统开发经验充足(全领域),有任何使用问题欢迎随时与我联系,我会及时为您解惑,提供帮助。 【资源内容】:包含完整源码+工程文件+说明(如有)等。答辩评审平均分达到96分,放心下载使用!可轻松复现,设计报告也可借鉴此项目,该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的。 【提供帮助】:有任何使用问题欢迎随时与我联系,我会及时解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 下载后请首先打开README文件(如有),项目工程可直接复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用。
项目描述:建立购物小商城平台. 实现了前台页面系统。 技术描述:通过Spring 主框架来管理Struts2和Hibernate 框架搭建的电商小平台,用MySQL数据库并创建了表有用户表,订单表,商品表,商品分类表,商品内容表,购物车表等来存储数据。用到hibernate….zip项目工程资源经过严格测试可直接运行成功且功能正常的情况才上传,可轻松复刻,拿到资料包后可轻松复现出一样的项目,本人系统开发经验充足(全领域),有任何使用问题欢迎随时与我联系,我会及时为您解惑,提供帮助。 【资源内容】:包含完整源码+工程文件+说明(如有)等。答辩评审平均分达到96分,放心下载使用!可轻松复现,设计报告也可借鉴此项目,该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的。 【提供帮助】:有任何使用问题欢迎随时与我联系,我会及时解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 下载后请首先打开README文件(如有),项目工程可直接复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值