实验一 分治与递归—用分治法实现元素选择 java算法
提高题二:用分治法实现元素选择
一、实验要求与目的
1、了解分治法的基本思想,掌握递归程序编写方法;
2、使用分治法编程,求解线形序列中第k小元素。
二、实验内容
1、 给定线形序列集中n个元素和一个整数k,1≤k≤n,输出这n个元素中第k小元素的值及其位置。
2、 简述该算法的原理、步骤。对该算法与直接排序查找进行比较。
3、 编写并调试程序。
测试要求:元素个数不少于100;分三种情况:k=1、k=n和k=中位数。
三、源代码
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;
}
}
结果:
转载于:https://blog.51cto.com/qiangmzsx/818749
实验一 分治与递归—用分治法实现元素选择 java算法相关推荐
- 常用十大算法 非递归二分查找、分治法、动态规划、贪心算法、回溯算法(骑士周游为例)、KMP、最小生成树算法:Prim、Kruskal、最短路径算法:Dijkstra、Floyd。
十大算法 学完数据结构该学什么?当然是来巩固算法,下面介绍了十中比较常用的算法,希望能帮到大家. 包括:非递归二分查找.分治法.动态规划.贪心算法.回溯算法(骑士周游为例).KMP.最小生成树算法:P ...
- c语言分治法求众数重数_算法实验二 分治法 众数问题.pdf
算法实验二 分治法 众数问题 算法分析与设计实验二 分治法 主要内容 • 实验目的 • 主要实验仪器设备和环境 • 实验内容 • 实验要求 • 注意点 实验目的 • 理解分治法的基本思想 • 针对特定 ...
- 分治法的关键特征_算法系列之常用算法之一----分治算法
一.基本概念 在计算机科学中,分治法是一种很重要的算法.分治算法,字面上的解释是"分而治之",分治算法主要是三点: 1.将一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问 ...
- C/C++ 用递归(分治法)解决多米诺骨牌问题
问题:现有 n 块"多米诺骨牌" s1, s2, · · · , sn 水平放成一排,每块骨 牌 si 包含左右两个部分,每个部分赋予一个非负整数值,骨牌可做 180 度旋转,使得 ...
- 分治法、动态规划、贪心算法区别
联系 分治.动态规划.贪心算法都是把一个大的问题给分解成子问题,通过解决子问题来最终解决原问题的. 区别 分治: 子问题不重复时候更适合,重复也能用,效率低,最好动态规划. 动态规划: 重复的公共子问 ...
- 汉诺塔递归的空间复杂度_【干货】Java算法复杂度
同一问题可用不同算法解决,而一个算法的质量优劣将影响到算法乃至程序的效率.算法分析的目的在于选择合适算法和改进算法. 算法复杂度分为时间复杂度和空间复杂度.其作用: 时间复杂度是度量算法执行的时间长短 ...
- 实验2 递归和分治法(二分查找)
1.递归的基本思想 (1)何为递归? 递归顾名思义就是´递´和´归´
- 实验一 分治与递归—整数划分 java实现
基本题一:基本递归算法 一.实验目的与要求 1. 熟悉Java语言的集成开发环境: 2.通过本实验加深对递归过程的理解 二.实验内容: 掌握递归算法的概念和基本思想,分析并掌握"整数划分& ...
- 实验一 分治与递归—全排列 java算法
全排列: 设R={r1,r2,r3……rn}是要排列的n个元素,Ri=R-{ri}.集合X中元素的全排列记perm(X). 源代码: 1 2 3 4 5 6 7 8 9 ...
最新文章
- 字符串位加密 php,PHP字符串加密增强版
- Pycharm回退操作+常用批量操作
- NeurlPS 2021论文预讲会议题全公开,4大主题和25场报告等你来
- Oracle事务之一:锁和隔离
- socket第三方库 AsyncSocket(GCDAsyncSocket)
- BZOJ3930-莫比乌斯反演+杜教筛
- jni中native通过adb输出
- 使用flask调用接口去加载模型和数据集,避免每次运行都会重复加载数据集或模型,节约大量等待时间
- javascript运动学教程
- hdu2157:How many ways??
- http accept字段有用吗_http协议(六)报文首部
- java.lang.NoClassDefFoundError异常处理
- Atom 备份神器 —— Sync Settings
- im2col函数解析
- ehcache 实现缓存共享
- [转]Android调用so文件(C代码库)方法详解
- 配置tomcat虚拟机
- 程序化广告(二)- 考核指标如CTR/CVR/ROI/ARPU等
- Allegro模块镜像详细操作教程
- Wear OS手表应用开发教程之-滑动隐藏布局-SwipeDismissFrameLayout