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);
}
}
}