实验一 分治与递归—用分治法实现元素选择 java算法

简介:

  提高题二:用分治法实现元素选择

一、实验要求与目的

1、了解分治法的基本思想,掌握递归程序编写方法;

2、使用分治法编程,求解线形序列中第k小元素。

二、实验内容

1、  给定线形序列集中n个元素和一个整数k1kn,输出这n个元素中第k小元素的值及其位置。

2、  简述该算法的原理、步骤。对该算法与直接排序查找进行比较。

3、  编写并调试程序。

测试要求:元素个数不少于100;分三种情况:k=1k=nk=中位数。

三、源代码

importjava.util.*;

import java.io.*;

 

 

public class SF_XianxingXuanze

{

       public static void main(String[] args)

       {

              Scanner read=new Scanner(System.in);

              Random r=new Random();//产生小于100 的数据

              for (; ; )

              {

                     int a[]=null,b[]=null,k=0,i=0,n=0,d=0,s=0;

                     System.out.println("请输入元素个数:");

                     n=read.nextInt();

                     a=new int[n];

                     b=new int[n];

                     for (i=0;i<n ;i++ )

                     {

                            a[i]=r.nextInt(100);

                     }

                     for (i=0;i<n ;i++ )

                     {

                            System.out.print(a[i]+"\t");

                            if ((i+1)%10==0)

                            {

                                   System.out.println();

                            }

 

                     }

                     System.out.println();

                     for (i=0,d=0;d<n ;d++ )//将数组a的值赋给数组b

                     {

                            b[d]=a[i];

                            i++;

                     }

                     quickSort(a,0,i-1);//调用快速排序进行排序

                     System.out.println("排序后");

                     for (i=0;i<n ;i++ )//输出排好序的数组a,每行10个数据

                     {

                            System.out.print(a[i]+"\t");

                            if ((i+1)%10==0)

                            {

                                   System.out.println();

                            }

                     }

 

 

 

                     System.out.println();

                     System.out.println("请输入第k小元素:");

                     k=read.nextInt();

                     for(d=0;d<n;d++) //从数组b中找出第k小的数在原数组中的位置

                     {

                            if(b[d]==a[k-1])          //从数组b中找出第k小的数在原数组中的位置

                            s=d+1;

                     }

                     System.out.println("******排序后的位置******");

                     System.out.println(""+k+"小元素为:"+a[k-1]);

                     System.out.println("******排序前的位置******");

                     System.out.println(""+k+"小元素位置:"+"\t"+s);

                    

              }

             

       }

       public static void quickSort(int a[],intp,int r){

              int q=0;

              if (p<r)

              {

                     q=partition(a,p,r);

                     quickSort(a,p,q-1);

                     quickSort(a,q+1,r);

              }

       }

 

       public static int partition(int a[],intp,int r){

              int z=p,x=r+1;

              int y=a[p];

              int t;

              while (true)

              {

                     while(a[++z]<y&&z<r);//空循环,不符合条件时向下执行

                     while(a[--x]>y);

                     if(z>=x)break;

                     t=a[z];

                     a[z]=a[x];

                     a[x]=t;

              }

              a[p]=a[x];

              a[x]=y;

              return x;

       }

}

 

结果:

 本文转自 梦朝思夕 51CTO博客,原文链接:http://blog.51cto.com/qiangmzsx/818749




相关文章
|
10月前
|
存储 缓存 安全
除了变量,final还能修饰哪些Java元素
在Java中,final关键字不仅可以修饰变量,还可以用于修饰类、方法和参数。修饰类时,该类不能被继承;修饰方法时,方法不能被重写;修饰参数时,参数在方法体内不能被修改。
124 3
|
3月前
|
资源调度 安全 Java
Java 大数据在智能教育在线实验室设备管理与实验资源优化配置中的应用实践
本文探讨Java大数据技术在智能教育在线实验室设备管理与资源优化中的应用。通过统一接入异构设备、构建四层实时处理管道及安全防护双体系,显著提升设备利用率与实验效率。某“双一流”高校实践显示,设备利用率从41%升至89%,等待时间缩短78%。该方案降低管理成本,为教育数字化转型提供技术支持。
88 1
|
4月前
|
负载均衡 算法 关系型数据库
大数据大厂之MySQL数据库课程设计:揭秘MySQL集群架构负载均衡核心算法:从理论到Java代码实战,让你的数据库性能飙升!
本文聚焦 MySQL 集群架构中的负载均衡算法,阐述其重要性。详细介绍轮询、加权轮询、最少连接、加权最少连接、随机、源地址哈希等常用算法,分析各自优缺点及适用场景。并提供 Java 语言代码实现示例,助力直观理解。文章结构清晰,语言通俗易懂,对理解和应用负载均衡算法具有实用价值和参考价值。
大数据大厂之MySQL数据库课程设计:揭秘MySQL集群架构负载均衡核心算法:从理论到Java代码实战,让你的数据库性能飙升!
|
4月前
|
人工智能 算法 NoSQL
LRU算法的Java实现
LRU(Least Recently Used)算法用于淘汰最近最少使用的数据,常应用于内存管理策略中。在Redis中,通过`maxmemory-policy`配置实现不同淘汰策略,如`allkeys-lru`和`volatile-lru`等,采用采样方式近似LRU以优化性能。Java中可通过`LinkedHashMap`轻松实现LRUCache,利用其`accessOrder`特性和`removeEldestEntry`方法完成缓存淘汰逻辑,代码简洁高效。
174 0
|
3月前
|
消息中间件 机器学习/深度学习 Java
java 最新技术驱动的智能教育在线实验室设备管理与实验资源优化实操指南
这是一份基于最新技术的智能教育在线实验室设备管理与实验资源优化的实操指南,涵盖系统搭建、核心功能实现及优化策略。采用Flink实时处理、Kafka消息队列、Elasticsearch搜索分析和Redis缓存等技术栈,结合强化学习动态优化资源调度。指南详细描述了开发环境准备、基础组件部署、数据采集与处理、模型训练、API服务集成及性能调优步骤,支持高并发设备接入与低延迟处理,满足教育机构数字化转型需求。代码已提供下载链接,助力快速构建智能化实验室管理系统。
126 44
|
8月前
|
存储 算法 安全
探究‘公司禁用 U 盘’背后的哈希表算法与 Java 实现
在数字化办公时代,信息安全至关重要。许多公司采取“禁用U盘”策略,利用哈希表算法高效管理外接设备的接入权限。哈希表通过哈希函数将设备标识映射到数组索引,快速判断U盘是否授权。例如,公司预先将允许的U盘标识存入哈希表,新设备接入时迅速验证,未授权则禁止传输并报警。这有效防止恶意软件和数据泄露,保障企业信息安全。 代码示例展示了如何用Java实现简单的哈希表,模拟公司U盘管控场景。哈希表不仅用于设备管理,还在文件索引、用户权限等多方面助力信息安全防线的构建,为企业数字化进程保驾护航。
|
11月前
|
存储 Java
深入探讨了Java集合框架中的HashSet和TreeSet,解析了两者在元素存储上的无序与有序特性。
【10月更文挑战第16天】本文深入探讨了Java集合框架中的HashSet和TreeSet,解析了两者在元素存储上的无序与有序特性。HashSet基于哈希表实现,添加元素时根据哈希值分布,遍历时顺序不可预测;而TreeSet利用红黑树结构,按自然顺序或自定义顺序存储元素,确保遍历时有序输出。文章还提供了示例代码,帮助读者更好地理解这两种集合类型的使用场景和内部机制。
124 3
|
11月前
|
Java
在Java的世界里,Set只接纳独一无二的元素。
【10月更文挑战第16天】在Java的世界里,Set只接纳独一无二的元素。本文通过拟人化的手法,讲述了重复元素从初次尝试加入Set被拒绝,到经历挣扎、反思,最终通过改变自己,成为独特个体并被Set接纳的全过程。示例代码展示了这一过程的技术实现。
70 1
|
10月前
|
存储 Java
判断一个元素是否在 Java 中的 Set 集合中
【10月更文挑战第30天】使用`contains()`方法可以方便快捷地判断一个元素是否在Java中的`Set`集合中,但对于自定义对象,需要注意重写`equals()`方法以确保正确的判断结果,同时根据具体的性能需求选择合适的`Set`实现类。
558 113
|
10月前
|
Java
那些与Java Set擦肩而过的重复元素,都经历了什么?
在Java的世界里,Set如同一位浪漫而坚定的恋人,只对独一无二的元素情有独钟。重复元素虽屡遭拒绝,但通过反思和成长,最终变得独特,赢得了Set的认可。示例代码展示了这一过程,揭示了成长与独特性的浪漫故事。
68 4

热门文章

最新文章