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

一、实验要求与目的

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算法相关推荐

  1. 常用十大算法 非递归二分查找、分治法、动态规划、贪心算法、回溯算法(骑士周游为例)、KMP、最小生成树算法:Prim、Kruskal、最短路径算法:Dijkstra、Floyd。

    十大算法 学完数据结构该学什么?当然是来巩固算法,下面介绍了十中比较常用的算法,希望能帮到大家. 包括:非递归二分查找.分治法.动态规划.贪心算法.回溯算法(骑士周游为例).KMP.最小生成树算法:P ...

  2. c语言分治法求众数重数_算法实验二 分治法 众数问题.pdf

    算法实验二 分治法 众数问题 算法分析与设计实验二 分治法 主要内容 • 实验目的 • 主要实验仪器设备和环境 • 实验内容 • 实验要求 • 注意点 实验目的 • 理解分治法的基本思想 • 针对特定 ...

  3. 分治法的关键特征_算法系列之常用算法之一----分治算法

    一.基本概念 在计算机科学中,分治法是一种很重要的算法.分治算法,字面上的解释是"分而治之",分治算法主要是三点: 1.将一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问 ...

  4. C/C++ 用递归(分治法)解决多米诺骨牌问题

    问题:现有 n 块"多米诺骨牌" s1, s2, · · · , sn 水平放成一排,每块骨 牌 si 包含左右两个部分,每个部分赋予一个非负整数值,骨牌可做 180 度旋转,使得 ...

  5. 分治法、动态规划、贪心算法区别

    联系 分治.动态规划.贪心算法都是把一个大的问题给分解成子问题,通过解决子问题来最终解决原问题的. 区别 分治: 子问题不重复时候更适合,重复也能用,效率低,最好动态规划. 动态规划: 重复的公共子问 ...

  6. 汉诺塔递归的空间复杂度_【干货】Java算法复杂度

    同一问题可用不同算法解决,而一个算法的质量优劣将影响到算法乃至程序的效率.算法分析的目的在于选择合适算法和改进算法. 算法复杂度分为时间复杂度和空间复杂度.其作用: 时间复杂度是度量算法执行的时间长短 ...

  7. 实验2 递归和分治法(二分查找)

    1.递归的基本思想 (1)何为递归? 递归顾名思义就是´递´和´归´

  8. 实验一 分治与递归—整数划分 java实现

    基本题一:基本递归算法 一.实验目的与要求 1.  熟悉Java语言的集成开发环境: 2.通过本实验加深对递归过程的理解 二.实验内容: 掌握递归算法的概念和基本思想,分析并掌握"整数划分& ...

  9. 实验一 分治与递归—全排列 java算法

    全排列:        设R={r1,r2,r3……rn}是要排列的n个元素,Ri=R-{ri}.集合X中元素的全排列记perm(X).        源代码:   1 2 3 4 5 6 7 8 9 ...

最新文章

  1. 字符串位加密 php,PHP字符串加密增强版
  2. Pycharm回退操作+常用批量操作
  3. NeurlPS 2021论文预讲会议题全公开,4大主题和25场报告等你来
  4. Oracle事务之一:锁和隔离
  5. socket第三方库 AsyncSocket(GCDAsyncSocket)
  6. BZOJ3930-莫比乌斯反演+杜教筛
  7. jni中native通过adb输出
  8. 使用flask调用接口去加载模型和数据集,避免每次运行都会重复加载数据集或模型,节约大量等待时间
  9. javascript运动学教程
  10. hdu2157:How many ways??
  11. http accept字段有用吗_http协议(六)报文首部
  12. java.lang.NoClassDefFoundError异常处理
  13. Atom 备份神器 —— Sync Settings
  14. im2col函数解析
  15. ehcache 实现缓存共享
  16. [转]Android调用so文件(C代码库)方法详解
  17. 配置tomcat虚拟机
  18. 程序化广告(二)- 考核指标如CTR/CVR/ROI/ARPU等
  19. Allegro模块镜像详细操作教程
  20. Wear OS手表应用开发教程之-滑动隐藏布局-SwipeDismissFrameLayout

热门文章

  1. 洛谷P2770 航空路线问题(费用流)
  2. 客户端存储——Storage
  3. 打造丝般顺滑的 H5 翻页库(传送门)
  4. 5分钟学会使用DataHub接入实时数据到MaxCompute(原ODPS)
  5. 【matlab】膨胀
  6. 数据聚合与分组运算——GroupBy
  7. 浅谈 block(1) – clang 改写后的 block 结构
  8. Trie树---前缀最相似匹配
  9. RIP路由协议的理解
  10. 由先序+后序遍历确定序列是否唯一并输出一个中序序列