博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
实验一 分治与递归—用分治法实现元素选择 java算法
阅读量:6909 次
发布时间:2019-06-27

本文共 1696 字,大约阅读时间需要 5 分钟。

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

一、实验要求与目的

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

转载地址:http://pfbcl.baihongyu.com/

你可能感兴趣的文章
64,管道符,控制命令,变量
查看>>
Java自带的性能监测工具之jmap
查看>>
2-openstack基础环境准备
查看>>
SVN安装采用AD认证
查看>>
hive常用语法示例
查看>>
unicode分类
查看>>
hadoop-003-源码之编译eclipse-plugin
查看>>
即使对象内容都为空,对象本身也是非空的
查看>>
MySQL事务隔离级别详解
查看>>
storm记录--3--Storm的基本概念
查看>>
×××灯marquee标签应用详解
查看>>
彻底弄懂css中单位px和em,rem的区别
查看>>
我的友情链接
查看>>
MapReduce的输出格式
查看>>
AD帐号属性灰色不能修改--解决办法
查看>>
当子页面关闭的时候动态刷新页面的局部
查看>>
javascript 去掉重复的值
查看>>
[置顶] jQuery基础学习(一)
查看>>
SIP Servlet 开篇
查看>>
我在IT中的那些转变
查看>>