• Java习题(选择,冒泡排序,折半查找)


    解决问题如下:

    1.求1+2!+3!+...+20!的和。

    2.获取数组中的最大和最小值。

    3.对数组进行选择排序、冒泡排序。

    4.在数组中查找某个数的位置(折半查找)。

    折半查找:      适合顺序表的查找,数组中存的是按顺序排列的元素,方法如下:
    定义变量low,mid,high分别指向数组中的最低位,中间和最高位的元素;比较要查找的元素和mid指向的元素,如果比mid大,则在mid和high之间继续查找,low=mid+1;

    否则在low和mid之间继续查找,high=mid-1.直到low大于high停止,

    找到要找的元素则返回标号,未找到则返回null.实际上就是比较一次能排除一半的元素,再在另一半的元素里查找,直到找到或者失败.

    简单选择排序是最简单直观的一种算法,基本思想为每一趟从待排序的数据元素中选择最小(或最大)的一个元素作为首元素,直到所有元素排完为止,简单选择排序是不稳定排序。

    冒泡排序算法的运作如下:(从后往前)
      1. 比较相邻的元素。如果第一个比第二个大,就交换他们两个。
      2. 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。
      3. 针对所有的元素重复以上的步骤,除了最后一个。
      4. 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。

    介绍完主要的思想后接下来是代码,因为JAVA还在初步学习中,希望大家多多指教!!!

    class  home
    {
    	public static void main(String[] args) 
    	{
    		System.out.println("你好!这是 1+2!+3!+...+20!求和结果");
    		JC(20);
    		System.out.println();
    		System.out.println();
    		System.out.println("你好!这是获取数组中的最大和最小值的结果");
    		int[] arr={2,1,3,5,9,2,7};
    		int[] arr1={3,2,5,8,4,15,14,1,25,6,3};
    		maxMin(arr);
    		System.out.println();
    		System.out.println();
    		System.out.println("你好!这是选择排序的结果");
            xzPX(arr);
    		System.out.println();
    		System.out.println();
    		System.out.println("你好!这是冒泡排序的结果");
    		mpPX(arr1);
    		System.out.println();
    		System.out.println();
    		System.out.println("你好!这是折中选择1的结果");
    		zzPX(arr,30);
    		System.out.println();
    		System.out.println();
    		System.out.println("你好!这是折中选择2的结果");
    		zzPX(arr1,14);
    	}
    	public static void JC(int num)
    	{
    		
    		int sum=0;
    		for (int i=1;i<=num ;i++ )
    		{
    			int n=1;
    			for(int j=1;j<=i;j++)
    			{
    				n=n*j;
    			}
    			sum=sum+n;		
    		}
    		
    			System.out.println("当n个阶乘之和的n为"+num+"时"+"其和为"+sum);
    	}
    	public static void maxMin(int[] arr)
    	{
          int max=arr[0]; int min=arr[0];
    	  for (int i=0;i<arr.length ;i++ )
    	  {
    		  if(max<arr[i]){
    			  max=arr[i];
    		  }
    		  if(min>arr[i]){
    			  min=arr[i];
    		  }
    	  }
    	  System.out.print("当数组为");
    	  for(int j=0;j<arr.length;j++){
    		  System.out.print(arr[j]+",");
    	  }
    	  System.out.println("其最大值为"+max+"最小值为"+min);
    	}
    
    	public static void sz(int[] arr)
    	{
    		for(int j=0;j<arr.length;j++){
    		  System.out.print(arr[j]+",");
    	  }
    	}
    
    	public static void xzPX(int[] arr)
    	{
    		System.out.print("未改变之前数组为");
    		sz(arr);
    		for (int i=0;i<arr.length ;i++ )
    		{
    			for (int j=i+1;j<arr.length ;j++ )
    			{
    				if(arr[i]>arr[j]){
    					int a=arr[j];
    					arr[j]=arr[i];
    					arr[i]=a;
    				}
    			}
    		}
    		System.out.print("改变之后数组为");
    		sz(arr);
    
    
    	}
    	public static void mpPX(int[] arr)
    	{
    		sz(arr);
    		for (int i=0;i<arr.length ;i++ )
    		{
    			//int b=i;
    			for (int j=1;j<arr.length-i ;j++)
    			{
    				
    				if(arr[j-1]>arr[j]){
    					int a=arr[j-1];
    					arr[j-1]=arr[j];
    					arr[j]=a;
    				}
    				//b=b+1;
    			}
    		}
    		System.out.print("改变之后数组为");
    		sz(arr);
         }
    	 public static void zzPX(int[] arr,int n)
    	{
    		 System.out.print("顺序数组为");
    		 sz(arr);
    		 System.out.print("数组长度为"+arr.length);
    		 int min=0;
    		 int max=arr.length-1;
    		 int mid=(min+max)/2;
    		 boolean a=false;
    	     while (min<max)
    	     {
    			
    			 if (n>arr[mid])
    			 {
    				 min=mid+1;
    				 mid=(min+max)/2;
    			 }
    			 else if(n<arr[mid])
    			 {
    				 max=mid-1;
    				 mid=(min+max)/2;
    			 }
    			 else if(n==arr[mid])
    				 {
                    System.out.println("当n等于"+n+"时其索引号为 "+mid);
    				a=true;
    				break;
    			 }        
    	     }
    		  if(a==false)
    			 {
    				 System.out.println("当n等于"+n+"时该顺序数组中无其数");
    			 }
    	 }
    }
    

      执行结果如下:

  • 相关阅读:
    TYVJ P1092 麻将
    BZOJ 1020——[SHOI2008]安全的航线flight
    JSOI2008 火星人prefix
    Silverlight下“DataGrid”和“Pdf”导出
    Jquery实现“Iframe”页面切换
    遍历表,执行存储过程的方法
    “JS”和“Aspx”之注册“JS脚本”、刷新页面、TreeNode下JS连接设置
    WeatherWebService
    WCF方法“异步调用”的“同步问题”
    “Silverlight”中获取“HTML元素和参数”及JS交互
  • 原文地址:https://www.cnblogs.com/HuangDaDa/p/8824800.html
Copyright © 2020-2023  润新知