两道课后题

/*
 * 编写一个程序表示出数N二进制中1的个数
 * 
 */
public class Recurison {    
    public  int calculate(int b){

        if(b<2){    
            return b;
        }else {

            return b%2+calculate(b/2);

        }
    }


    public static void main(String[] args) {
        Recurison r = new Recurison( );
        System.out.println(r.calculate(8));
        // TODO Auto-generated method stub


    }

}
import java.util.Arrays;

/*
 * 需求: 编写一个程序解决选择问题,找出第k个数
 * 分析:先拿出一半从小到大排序,然后另一半和排序的最后一个进行比较,如果比他大忽略
 * 如果比他小就把它放在相应的位置上,把最后那个踢出去,最后返回的最后的那个就是要的值
 */
public class Select {
    //冒泡排序
    public void sort(int arr[]){
        for(int i=1;i<arr.length;i++){
            for(int j=0;j<arr.length-i;j++){
                if(arr[j]>arr[j+1]){
                    int tmp = arr[j];
                    arr[j]=arr[j+1];
                    arr[j+1]=tmp;
                }
            }
        }

    }


    public static  int compare(int arr[],int k){        
        int arr1[]=Arrays.copyOf(arr,k);
        for(int i=k;i<arr.length;i++){
            if (arr1[k-1]>arr[i]){
                arr1[k-1]=arr1[k-2];    
                for (int j=k-2;j>0;j--){
                    if (arr1[j]<arr[i]){
                        arr1[j+1]=arr[i];
                    }else{
                        arr1[j]=arr1[j-1];
                    }
                }
            }

        }
        return arr1[k-1];
    }


    /**
     * @param args
     */
    public static void main(String[] args) {
        int arr[]={1,5,9,4,6,8};
        int k = arr.length/2;
        long start = System.currentTimeMillis();

        int ka=compare(arr, k);
        System.out.println(ka);
        System.out.println(k);

        System.out.println("时间"+(System.currentTimeMillis()-start)+"ms");

        // TODO Auto-generated method stub

    }

}

猜你喜欢

转载自blog.csdn.net/lx127372/article/details/80960805