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;
        }
    }
}

 

 

 

 

 

你可能感兴趣的:(java)