兩道課後題

/*
 * 編寫一個程序表示出數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

    }

}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章