每日作業1208

元氣少女帕吉發表於2020-12-10

二分插入法
已知, 目前有一個已正序排好的9個元素的陣列,
現在輸入一個數
要求按原來排序的規律將它插入陣列中。
輸入:
第一行, 9個整數, 表示已經排好序的陣列
第二行: 一個整數 表示需要被插入的數字
輸出:
插入數字後的陣列
樣例輸入:
1 7 8 17 23 24 59 62 101
50
樣例輸出:
1 7 8 17 23 24 50 59 62 101

//參考了路過的假面騎士的程式碼,感謝
public class Task1028 {
	 public static void main(String[] args) {
		 Scanner input = new Scanner(System.in);
		 //根據題目要求,先要有9個正序排列的數字,因為中間要加入一個數字,所以建立一個10個元素的陣列
		 int[] nums = new int[10];
		 int temp = -1; //狀態
		 System.out.println("請依次輸入9個數字,並保持正序排列");
		 for (int i = 0; i < 9; i++) {
			nums[i] = input.nextInt();
			if(nums[i] > temp) {
			 temp = nums[i];
			} else {
				i--;
			}
		}
		
		System.out.println("請輸入一個要插入的數字"); 
		int a = input.nextInt();
		int left = 0;
		int right = 8;
		int index = -1; //要插入的位置
		while (nums[left] <= nums[right]) {
			int mid = left + (right - left) / 2;
			if(a == nums[mid]) {
				index = mid;
			} else if(a > nums[mid]) {
				left = mid + 1;
			} else if(a < nums[mid]) {
				right = mid - 1;
			} 
			index = left;
		}
		for(int i = 9; i > index; i--) {
			nums[i] = nums[i-1];
		}
		nums[index] = a;
		System.out.println(Arrays.toString(nums));
	 }
}
//功能實現了,整體效果不是很好,回頭在整理幾份

可以用sort() 方法自動排序的