实验一 分治与递归—用分治法实现元素选择 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




相关文章
|
12天前
|
算法 安全 Java
性能工具之 JMeter 自定义 Java Sampler 支持国密 SM2 算法
【4月更文挑战第28天】性能工具之 JMeter 自定义 Java Sampler 支持国密 SM2 算法
27 1
性能工具之 JMeter 自定义 Java Sampler 支持国密 SM2 算法
|
10天前
|
XML 前端开发 Oracle
16:JSP简介、注释与Scriptlet、Page指令元素、Include操作、内置对象、四种属性-Java Web
16:JSP简介、注释与Scriptlet、Page指令元素、Include操作、内置对象、四种属性-Java Web
13 2
|
12天前
|
安全 Java
循环的时候去删除集合中的元素 java.util.ConcurrentModificationException
循环的时候去删除集合中的元素 java.util.ConcurrentModificationException
|
12天前
|
Java
java Map删除值为null的元素
java Map删除值为null的元素
|
12天前
|
Java API
【亮剑】三种有效的方法来删除List中的重复元素Java的List
【4月更文挑战第30天】本文介绍了三种Java中删除List重复元素的方法:1) 使用HashSet,借助其不允许重复值的特性;2) 利用Java 8 Stream API的distinct()方法;3) 对自定义对象重写equals()和hashCode()。每种方法都附带了代码示例,帮助理解和应用。
|
18天前
|
设计模式 算法 Java
[设计模式Java实现附plantuml源码~行为型]定义算法的框架——模板方法模式
[设计模式Java实现附plantuml源码~行为型]定义算法的框架——模板方法模式
|
19天前
|
搜索推荐 算法 Java
Java实现的常用八种排序算法
提到数据结构与算法,无法避免的一点就包含排序,熟练的掌握各种排序算法则是一个程序员必备的素质之一,除此之外,排序算法也是当下各大技术公司比较喜欢问的技术点,所以,就这一点JavaBuild整理了常见的8种排序算法
8 0
|
23天前
|
机器学习/深度学习 数据采集 算法
使用 Java 实现机器学习算法
【4月更文挑战第19天】Java在数据驱动时代为机器学习提供支持,具备丰富的数学和数据结构库,适用于实现线性回归、决策树、SVM和随机森林等算法。实现时注意数据预处理、模型选择、评估指标和可视化。利用Java的库和编程能力可构建高效模型,但需按问题需求选择合适技术和优化方法。
|
27天前
|
存储 机器学习/深度学习 算法
上机实验三 图的最小生成树算法设计 西安石油大学数据结构
上机实验三 图的最小生成树算法设计 西安石油大学数据结构
21 1
|
27天前
|
存储 算法 C语言
上机实验四 图的最小生成树算法设计 西安石油大学数据结构
上机实验四 图的最小生成树算法设计 西安石油大学数据结构
23 1