`

二分法、冒泡排序

    博客分类:
  • j2se
 
阅读更多

import java.util.Scanner;
/**
   总结: if,switch,for,while,一维数组,二维数组,函数
**/
public class Test
{
 /**平年闰年
 public static void main(String[] args)
 {
       int month=2;
    int year=2002;
     if(month==1||month==3||month==5||month==7||month==8||month==10||month==12){
          System.out.println("31天");
  }else if(month==4||month==6||month==9||month==11){
          System.out.println("30天");
  }else if(month==2){
   if(year%4==0&&year%100!=0 || year%400==0){
          System.out.println("29天");
   }else{
    System.out.println("28天");
   } 
 }**/
   /**switch运用
   public static void main(String[] args) {
       int grade=6;
    switch(grade){
     case 1:
                  System.out.println("☆");
            break;
     default:
        System.out.println("错了");
          // break;
           case 2:
         System.out.println("☆☆");
         break;
     case 3:
         System.out.println("☆☆☆");
         break;
     case 4:
         System.out.println("☆☆☆☆");
         break;
     case 5:
         System.out.println("☆☆☆☆☆");
         break;
    
    }

 }
 **/
/** for和while输出1-100之内的奇数和
  public static void main(String[] args) {
   int sum=0;
   for(int i=1;i<100;i++){
    if(i%2!=0){
    sum=sum+i;
    }
   }
   System.out.println(sum);
 

     sum=0;
  int i=1;
  while(i<100){
   if(i%2!=0){
            sum=sum+i;
   }
   i++;
  }
}
**/
//打印实心等腰三角形
/**
public static void main(String[] args) {
  int rows = 0; //三角形行数
  System.out.print("请输入等腰三角形的行数:");
  Scanner input = new Scanner(System.in);
  rows = input.nextInt();
  //打印等腰三角形,其中i表示整个这个等腰三角形的行数,j表示三角形中空格的行数,k表示三角形中*的行数
  for(int i = 1; i <= rows; i++){
   for(int j = 1; j <= rows-i; j++){
    System.out.print(" ");//先输出row-i个空行
   }
   for(int k = 1; k <= 2*i-1; k++){
    System.out.print("*");//再输出2*i-1个*
   }                         //先输出row-i个空行,再输出2*i-1个*,这就是三角形的左半部分空白和所有*,右半部分空白不用管。到此为止完成一行
   System.out.print("\n");//回车,开始打印三角形的下一行
  }
 }
**/
/**
//打印空心菱形
public static void main(String[] args) {
  int rows = 0; //菱形的行数
  Scanner input = new Scanner(System.in);
  System.out.print("请输入菱形行数:");
  rows = input.nextInt();

  while(rows%2 == 0){
   System.out.print("请输入奇数:");
   rows = input.nextInt();
  }

  int n = (rows+1)/2;
  //打印菱形的上半部分
  for(int i = 1; i <= n; i++){//外层循环变量i控制行数
   for(int j = 1; j <= n-i; j++){//内层循环变量j控制该行空格数
    System.out.print(" ");
   }
   System.out.print("*");
   for(int k = 1; k <= 2*(i-1)-1; k++){//内层循环变量k控制该行*号数
    System.out.print(" ");
   }
   if(i!=1){
   System.out.print("*");
   }
   System.out.print("\n");
  }
  //打印菱形的下半部分
  for(int i = n-1; i >= 1; i--){
   for(int j = 1; j <= n-i; j++){
    System.out.print(" ");
   }
   System.out.print("*");
   for(int k = 1; k <= 2*(i-1)-1; k++){
    System.out.print(" ");
   }
   if(i!=1){
   System.out.print("*");
   }
   System.out.print("\n");
  }
 }
**/

 

 

public static void main(String[] args) {
 int val=78;
 //1
 int temp=Test.max(4,67);//这里用类名,只是默认不写,
                          //这就是函数和方法的区别,函数用static修饰,用类名调用。方法不用static修饰,用对象名调用
 System.out.println(temp);
    //2
 int temp1=Test.max1(34,68,45);
 System.out.println(temp1);
    //3
 int[] a={34,78,99,10,100};
 int temp2=max2(a);
 System.out.println(temp2);
    //4
 bubble_Sort(a);
 for(int i=0;i<a.length;i++){
  System.out.print(a[i]+"  ");
 }
 System.out.println("");
    //5
 int temp3=search(a,val);
 System.out.println(temp3);
    //6
 int temp4=search1(a,val);
 System.out.println(temp4);
    //7
 reverse(a);
 for(int i=0;i<a.length;i++){
  System.out.print(a[i]+"  ");
 }
 System.out.println("");
 //8
 int temp5=add(a);
 System.out.println(temp5);
 //9
 double temp6=avg(a);
    System.out.println(temp6);
    //注释:这能打出具体的商,因为是float类型,在求商的时候强制类型转换了。
 int x=20;
 float y=22.19f;
    System.out.print(x/y);
 System.out.println("");
 //10.
 System.out.println("---------");
 double temp7=avg1(a);//double保留十四位小数
    System.out.println("打印:"+temp7);
 float temp8=avg1(a);//float保留一位小数
    System.out.println("打印:"+temp8);
 System.out.println("---------");
 //11.
 sort(a);
 for(int i=0;i<a.length;i++){
  System.out.print(a[i]+"  ");
 }
   System.out.println("");
   //12.
   String temp9=arrToString(a);
   System.out.println(temp9);
}

//1.求两个数的最大值
public static int max(int x,int y){//这里必须加上static关键字,否则无法运行
  int m=x>y?x:y;                  //返回值为基础数据类型保存在栈内存???还是方法没有被对象调用???
  return m;
}
//2.求三个数的最大值
public static int max1(int x,int y,int z){
    int m=max(x,y);
  m=max(m,z);
  return m;
}
//3.求数组的最大值
public static int max2(int[] arr){
 int max=arr[0];
    for(int i=1;i<arr.length;i++){
  if(arr[i]>max){
   max=arr[i];
  }
 }
 return max;
}
//4.数组的冒泡排序
public static void bubble_Sort(int[] arr){
 for(int i=0;i<arr.length-1;i++){
  for(int j=0;j<arr.length-1-i;j++){
   if(arr[j]<arr[j+1]){
    int temp=arr[j];
    arr[j]=arr[j+1];
    arr[j+1]=temp;
   }
  }
 }
}
//5.数组中的查找,查找这个数在数组中的位置
public static int search(int[] arr,int value){
 for(int i=0;i<arr.length;i++){
  if(arr[i]==value){
          return i;
  }
 }
 return -1; 
}
//6.数组中的查找,二分法查找
public static int search1(int[] arr,int value){
 int min=0;//第一个数下标(索引)
 int max=arr.length-1;//最后一个数的下标
 int mid=(max+min)/2;//中间数下标
 while(arr[mid]!=value){
  if(value>arr[mid]){
    min=mid+1;  
  }else if(value<arr[mid]){
   max=mid-1;
  }
  mid=(max+min)/2;
 }
 return mid;
 }

//7.数组中的反转
public static void reverse(int []arr) {
 for(int i=0;i<arr.length/2;i++){//这里注意循环次数
  int temp=arr[i];//将arr[i]与arr[arr.length-1-i]进行交换
  arr[i]=arr[arr.length-1-i];
  arr[arr.length-1-i]=temp;  
 }
  }
//8.数组求和
public static int add(int[] arr){
 int sum=0;
 for (int i=0;i<arr.length ;i++ )
 {
  sum=sum+arr[i];
 }
 return sum;
}
//9.数组求平均值:思路是在用/号的时候引入double或者float类型的数据,让除完的结果变成小数
public static float avg(int[] arr){
 int sum=0;
 for (int i=0;i<arr.length ;i++ )
 {
        sum=sum+arr[i];
 }
 int num1=sum/arr.length;//整数
 
 float num2=sum%arr.length;//余数,这里的类型不能为整型,因为还需要利用余数求小数呢,在求小数的时候需要double类型或者float类型的,这样能够打印具体的小数出来
 float num3=num2/arr.length;//余数的余数
 System.out.println("整数部分:"+num1);
 System.out.println("余数部分:"+num2);
 System.out.println("余数再次求余(小数部分):"+num3);
 float avg=num1+num3;//这题能证明:float保留一位小数,double保留14位小数
 System.out.println("平均数:"+avg);
 return avg;
}
//10.求数组平均值,简化第九题。
public static float avg1(int[] arr){
 float sum=0;
 for (int i=0;i<arr.length ;i++ )
 {
        sum=sum+arr[i];
 }
 System.out.println(sum);
 float avg1=sum/arr.length;
 return avg1;
}
//11.数组排序中的选择排序:选择排序
public static void sort(int[] arr){
 for(int i=0;i<arr.length;i++){
  for(int j=i+1;j<arr.length;j++){
   if(arr[i]<arr[j]){
    int temp=arr[i];
    arr[i]=arr[j];
    arr[j]=temp;
   }
  }
 }
}
//12.将数组转化成字符串,例[34,45,38,79]
public static String arrToString(int[] arr){
 String str="[";
 for(int i=0;i<arr.length;i++){
  if(i!=arr.length-1){
   str=str+arr[i]+",";
  }else{
   str=str+arr[i]+"]";
  }
 }
   return str;
}


}

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics