JAVA基礎(第5天排序、查找)

1.排序問題

  • 冒泡排序
  • 選擇排序
  • 插入排序
package progect3_1;

import java.util.Arrays;
import java.util.Scanner;

public class Sort {
	Scanner input = new Scanner(System.in);
	static int arr[] = new int[] {2,78,32,46,12,19,73,55};
	public static void main(String[] args) {
		System.out.println("arr原數組爲:");
		System.out.println(Arrays.toString(arr));
		maopao(arr);	
		System.out.println("------------------------");
		chance(arr);
		System.out.println("------------------------");
		int[] arr1 = new int[]{2, 19, 11, 32, 21, 55, 89,49,78};
		System.out.println("arr1原數組爲:");
		System.out.println(Arrays.toString(arr1));
		insert1(arr1);
	}
	//冒泡排序
	/**
	 * N個數字來比較
	    *    兩兩相比小靠前,大靠後
	    *   外層循環n-1
	    *   內層循環n-1-i
	 * @param arr
	 */
	public static void maopao(int[] arr) {
		//外層循環控制數字比較次數,n個數比較n-1次
		for (int i = 0; i < arr.length-1; i++) {
			//內層循環每次比較相鄰的兩個數
			for (int j = 0; j <arr.length-1-i; j++) {
				if(arr[j]>arr[j+1]) {
					int temp = arr[j];
					arr[j] = arr[j+1];
					arr[j+1] = temp;
				}
			}
		}
		System.out.println("冒泡排序爲:"+Arrays.toString(arr));
	}
	//選擇排序
	public static void chance(int [] arr) {
		for (int i = 0; i < arr.length-1; i++) {
			for (int j = i+1; j < arr.length; j++) {
				if(arr[i]>arr[j]) {
					int temp = arr[i];
					arr[i] = arr[j];
					arr[j] = temp;
				}
			}
		}
		System.out.println("選擇排序爲:"+Arrays.toString(arr));
	}
	//插入排序
	public static void insert1( int[] arr){
	for (int j = 1; j < arr.length; j++){
		// i作爲即將要插入的位置
		int key = arr[j];
		int i = j ;
		for (; i > 0; i--) {
			if (key < arr[i - 1]) {
				// 把當前位置的數換成前面的數(後移)
				arr[i] = arr[i - 1];
			}else {// 如果key 大於前面的的數了,說明當前i的位置就是要插入的位置了
				break;
			}
		}
		// 通過上面循環的後移和查找,最終獲得了要插入的位置i
		arr[i] = key; // 插入
	}
	System.out.println("插入排序爲:"+Arrays.toString(arr));
	}	
}

在這裏插入圖片描述
插入排序:將一個值插入到數組中並進行排序

package com.wdzl.demo06;

import java.util.Arrays;

public class Paixu {
	public static void main(String[] args) {
		int arr[] = new int[8];
		arr[0] = 16;
		arr[1] = 13;
		arr[2] = 14;
		arr[3] = 15;
		arr[4] = 10;
		arr[5] = 18;
		arr[6] = 120;
		System.out.println("原數組爲:"+Arrays.toString(arr));
		insert(arr, 20);
		System.out.println("插入後:"+Arrays.toString(arr));
	}
	//插入排序
	public static void insert(int arr[], int key) {
		// 獲取數組的長度
		int i = arr.length - 1;
		for (; i > 0; i--) {
			if (key < arr[i - 1]) {
				// 把當前位置的數換成前面的數(後移)
				arr[i] = arr[i - 1];
			} else {
				// 如果key 大於前面的的數了,說明當前i的位置就是要插入的位置了
				break;
			}
		}
		// 通過上面循環的後移和查找,最終獲得了要插入的位置i
		arr[i] = key;// 插入
	}

}

插入後:
在這裏插入圖片描述


2.二分查找

package progect2_1;

import java.util.Arrays;
import java.util.Scanner;

public class Lianxi2 {
	public static void main(String[] args) {
		int arr[] = new int[] { 2, 3, 6, 8, 9, 15, 17, 19, 24, 0 };
		System.out.println(Arrays.toString(arr));
		boolean isinsert = true;
	while(isinsert) {
		Scanner input = new Scanner(System.in);
		System.out.println("請輸入你想要查找的數字!");
		int number = input.nextInt();
		erfenchazhao(number, arr);
		System.out.println("是否繼續查找? 1:yes 2:no");
		String str = input.next();
		if(str.equals("1")) {
			isinsert = true;
		}else {
			isinsert = false;
		}
	}
	}
	// 二分查找法
	public static void erfenchazhao(int key, int[] arr) {
		int index = -1;
		int front = 0;
		int behind = arr.length;
		for (int i = 0; i < arr.length; i++) {
			int middle = (front + behind) / 2;
			if (key < arr[middle]) {
				behind = middle - 1;
			} else if (key > arr[middle]) {
				front = middle + 1;
			} else {
				index = middle;
				break;
			}

		}
		if(index == -1) {
			System.out.println("不好意思,親,沒有找到奧!");
		}else {
			System.out.println("恭喜你,找到了,改數字的下標爲:" + index);
		}
	}
}

在這裏插入圖片描述

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