zoukankan      html  css  js  c++  java
  • java小练习

    1.冒泡,选择排序

    public class TestA {
    
        public static void main(String[] args) {
            int[] arr = new int[args.length];
            for(int i=0;i<args.length;i++)
            {
                arr[i] = Integer.parseInt(args[i]);
            }    
    
            bubbleSort(arr);
            print(arr);
            
        }
        
        //相邻之间交换
        public static void bubbleSort(int[] arr){
            int len = arr.length, tmp;
            
            for(int i=len-1;i>=1;i--)
            {
                for(int j=0;j<i-1;j++)
                {
                    if(arr[j]>arr[j+1])
                    {
                        tmp = arr[j];
                        arr[j] = arr[j+1];
                        arr[j+1] = tmp;
                    }    
                }
            }
        }
        
        //这一个依次和其他对比交换
        public static void selectSort(int[] arr){
            int k,tmp;
            for(int i=0;i<arr.length;i++)
            {
                k = i;
                for(int j=i+1;j<arr.length;j++)
                {
                    if(arr[k]>arr[j])
                    {
                        k = j;
                    }    
                }    
                
                if(k != i)
                {
                    tmp = arr[i];
                    arr[i] = arr[k];
                    arr[k] = tmp;
                }    
                
            }
        }
        
        public static void print(int[] arr)
        {
            for(int i=0;i<arr.length;i++)
            {
                System.out.print(arr[i]+" ");
            }    
        }
    
    }

     2.二分法查找

      

    public class TestSearch {
        public static void main(String[] args) {
            int a[] = { 1, 3, 6, 8, 9, 10, 12, 18, 20, 34 };
            int i = 12;
            //System.out.println(search(a, i));
            System.out.println(binarySearch(a, i));
        }
        
        public static int search(int[] a, int num) {
            for(int i=0; i<a.length; i++) {
                if(a[i] == num) return i;
            }
            return -1;
        }
        
        public static int binarySearch(int[]a, int num) {
        if (a.length==0) return -1;
        
        int startPos = 0; 
        int endPos = a.length-1;
        int m = (startPos + endPos) / 2;
        while(startPos <= endPos){
          if(num == a[m]) return m;
          if(num > a[m]) {
              startPos = m + 1;
          }
          if(num < a[m]) {
              endPos = m -1;
          }
          m = (startPos + endPos) / 2;
        }
        return -1;
      }
    
    }

     3.

    /**
     * 500个小孩围成一圈,每数到3则推出,继续数,计算最后那个小孩的位置
     */
    public class count3Quit {
    
        public static void main(String[] args) {
            boolean[] arr = new boolean[500];
            for(int i=0;i<arr.length;i++)
            {
                arr[i] = true;
            }    
            //剩余小孩的数量
            int leftCount = arr.length;
            
            //数组当前元素的下标
            int index = 0;
            
            //最大值
            int countNum = 0;    
            
            while(leftCount>1)
            {
                if(arr[index] == true)
                {
                    countNum ++;
                    if(countNum == 3)
                    {
                        countNum = 0;
                        arr[index] = false;
                        leftCount --;
                    }    
                }
                
                //保证数组一直循环下去
                index ++;
                if(index == arr.length)
                {
                    index = 0;
                }    
            }
            
            //找出最后元素的位置
            for(int i=0;i<arr.length;i++)
            {
                if(arr[i] == true)
                {
                    System.out.println(i);
                }    
            }
            
        }
    }

     4.上面的问题,用面向对象的方式实现

    //500个小孩围成一圈,每数到3则推出,继续数,计算最后那个小孩的位置
    public class count3Quit {
        public static void main(String[] args) {
            KidCircle kc = new KidCircle(10);
            
            kc.print();
            
            /*int countNum = 0;
            Kid k = kc.first;
            while(kc.count > 1) {
                countNum ++;
                if(countNum == 3) {
                    countNum = 0;
                    kc.delete(k);
                }
                k = k.right;
            }
            
            //这时只剩一个元素
            System.out.println(kc.first.id);*/
        }
    }
    
    class Kid {
        int id;
        Kid left;
        Kid right;
    }
    
    class KidCircle {
        int count = 0;
        Kid first, last;
        
        KidCircle(int n) {
            for(int i=0; i<n; i++) {
                add();
            }
        }
        
        //增加元素
        void add() {
            Kid k = new Kid();
            k.id = count;
            if(count <= 0) {
                first = k;
                last = k;
                k.left = k;
                k.right = k;
            } else {
                last.right = k;
                k.left = last;
                k.right = first;
                first.left = k;
                last = k;
            }
            count ++;
        }
        
        //删除元素
        void delete(Kid k) {
            if(count <= 0) {
                return;
            } else if (count == 1) {
                first = last = null;
            } else {
                k.left.right = k.right;
                k.right.left = k.left;
                
                if(k == first) {
                    first = k.right;
                } else if( k == last) {
                    last = k.left;
                }
            }
            count --;
        }
        
        //遍历圈
        void print()
        {
            Kid tmp = first;
        
    /*        while(true)
            {
                System.out.println("id:"+tmp.id);
                tmp = tmp.right;
                if(tmp == first)
                {
                    System.exit(-1);
                }
            }    */
            
            for(int i=0;i<count;i++)
            {
                System.out.println("id:"+tmp.id);
                tmp = tmp.right;
            }
        }
    }
  • 相关阅读:
    Hessian 服务端流程
    JSH面试感悟
    hibernate的update() 更新延迟或者无法更新,导致同个service调用存储过程执行方法不精确
    一个变量名引发的血案
    oracle for loop循环以及游标循环
    My97Datepicker 去掉 “不合法格式或超期范围”自动纠错限制
    获取前后n天的时间
    基于spring aop的操作日志功能
    为TIF、JPG图片添加地理坐标/平面直角坐标
    NGINX 中常规优化
  • 原文地址:https://www.cnblogs.com/siqi/p/3321209.html
Copyright © 2011-2022 走看看