GO和JAVA實現二分查找和交替打印奇偶數

 

 

二分查找和交替打印100以內的奇偶數 

  二分查找

 GO實現,與JAVA基本沒有區別:

  GO:

func BinarySearch(a []int, v int) int {
	n := len(a)
	if n == 0 {
		return -1
	}
	low := 0
	high := n - 1
	for low <= high {
		mid := (low + high) >> 1
		if a[mid] == v {
			return mid
		} else if a[mid] > v {
			high = mid - 1
		} else {
			low = mid + 1
		}
	}

	return -1
}
//遞歸實現
func BinarySearchRecursive(a []int, v int) int {
	n := len(a)
	if n == 0 {
		return -1
	}

	return bs(a, v, 0, n-1)
}

func bs(a []int, v int, low, high int) int {
	if low > high {
		return -1
	}

	mid := (low + high) >> 1
	if a[mid] == v {
		return mid
	} else if a[mid] > v {
		return bs(a, v, low, mid-1)
	} else {
		return bs(a, v, mid+1, high)
	}
}
func main()  {

	arr:= []int{1,4,12,35,14,11}
    //key := 2
	key := 4
	//a := BinarySearch(arr, key)
	a :=BinarySearchRecursive(arr, key)
	if a == -1 {
		fmt.Println("查找的是",key,",序列中沒有該數")
	}else{
		fmt.Println("查找的是",key,",找到在數組中的位置座標爲",a)
	}
}

 

JAVA:

package com.csq.study;

public class BinarySearch {

    public static int BinarySearch(int[] arr,int key){
        int low = 0;
        int high = arr.length - 1;
        if(arr.length == 0){
            return -1;
        }
        while(low <= high){
            int middle = (low + high) >> 1;
            if(arr[middle] > key){
                high = middle - 1;
            }else if(arr[middle] < key){
                low = middle + 1;
            }else{
                return middle;
            }
        }
        return -1;
    }

    //遞歸實現
    public static int BinarySearchRecursive(int[] arr,int key,int low,int high){
        if( low > high){
            return -1;
        }
        int middle=(low + high) >> 1;

        if(arr[middle] > key){
            return BinarySearchRecursive(arr, key, low, middle - 1);
        }else if(arr[middle] < key){
            return BinarySearchRecursive(arr, key, middle + 1, high);
        }else {
            return middle;
        }

    }



    public static void main(String[] args) {
        int[] arr = {1,4,12,35,14,11};
        //int key = 2;
        int key = 4;
       // int a = BinarySearchRecursive(arr,key,0,arr.length - 1);
        int a = BinarySearch(arr, key);

        if(a == -1){
            System.out.println("查找的是"+key+",數組中沒有該數!");
        }else{
            System.out.println("查找的是"+key+",找到在數組中的位置座標爲:"+a);
        }

    }
}

 

交替打印奇偶數

  GO:

func main()  {


	ch := make(chan int)
	go grount2(ch,100)
	go grount1(ch,100)
	time.Sleep(time.Second * 1)
}

func grount1(p1 chan int, count int) {
	for i := 0; i <= count; i++ {
		p1 <- i
		if i%2 == 0 {
			fmt.Println("grount1:", i)
		}
	}
}
func grount2(p1 chan int,count int) {
	for i := 0; i <= count; i++ {
		<-p1
		if i%2 != 0 {
			fmt.Println("grount2:", i)
		}
	}
}

JAVA:

package com.csq.study;




public class ChangeDemo {
    private int count = 0;
    private final Object lock = new Object();
    public void turning() throws InterruptedException {
        new Thread(new TurningRunner()).start();
        Thread.sleep(1);
        new Thread(new TurningRunner()).start();
    }

   public class TurningRunner implements Runnable {
        @Override
        public void run() {
            while (count <= 100) {
                synchronized (lock) {
                    System.out.println(count);
                    count++;
                    lock.notifyAll();
                    try {
                        if (count <= 100) {
                            lock.wait();
                        }
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            }
        }
    }


    public static void main(String[] args) throws InterruptedException {
        final ChangeDemo changeDemo = new ChangeDemo();
        changeDemo.turning();
    }



}

 

ok ,個人覺得go對於線程的操作還是比java要簡單很多

未完待續  ......

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