分析數組
先定義一個數組:int arr[]={11,66,77,2,1};bash
第一次:arr[0]與arr[1],arr[1]與arr[2],arr[2]與arr[3],arr[3]與arr[4];第一輪比較4次ui
第二次:arr[1]與arr[2],arr[2]與arr[3],arr[3]與arr[4]第二輪比較3次spa
第三次:arr[2]與arr[3],arr[3]與arr[4]第三輪比較2次code
第四次:arr[3]與arr[4]第四輪比較了1次cdn
接下來具體用代碼實現升序;blog
public class Sort {
public static void main(String[] args) {
//定義一個數組
int arr[] = {11, 66, 77, 2, 1};
//定義三個數轉化方法
sort(arr);
//定義foreach打印方法
print(arr);
}
public static void sort(int arr[]) {
//限制外層循環的次數
for (int i = 0; i < arr.length - 1; i++) {
//內層循環次數
for (int j = 0; j < arr.length - i - 1; j++) {
//核心比較:前一個數直接和後一個數比較
if (arr[j] > arr[j + 1]) {
swap(arr, i, j);
}
}
}
}
public static void swap(int arr[], int i, int j) {
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
public static void print(int arr[]) {
for (int a : arr) {
System.out.print(a+" ");
}
}
}
複製代碼
運行結果排序
分析:索引
定義一個數組 int [] arr={99,77,88,55,46};get
第一次:arr[0],分別和arr[1-4]比較,比較4次
第二次:arr[1],分別和arr[2-4]比較,比較3次
第三次:arr[2],分別和arr[3-4]比較,比較2次
第四次:arr[3],分別和arr[4]比較,比較1次 用代碼去實現升序:
public class sort {
public static void main(String[] args) {
int[] arr = {99, 77, 88, 55, 46};
chooseSort(arr);
choosePrint(arr);
}
public static void chooseSort(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]) {
swap(arr, i, j);
}
}
}
}
public static void swap(int arr[], int i, int j) {
int temp = arr[j];
arr[j] = arr[i];
arr[i] = temp;
}
public static void choosePrint(int arr[]) {
for (int a : arr) {
System.out.print(a + " ");
}
}
}
複製代碼
運行結果:
、public static void main(String[] args) {
int arr[] = {11, 22, 33, 44, 55, 66, 77};
System.out.println(getIndex(arr, 33));
}
public static int getIndex(int arr[] ,int value) {
//定義數組的最大值,最小值,和中間值
int min=0;
int max=arr.length-1;
int mid=(min+max)/2;
while (arr[mid]!=value){
if (arr[mid]>value){
max=mid-1;
}else if (arr[mid]<value){
min=mid+1;
}
//從新對中間的值進行賦值
mid=(max+min)/2;
}
//作健壯性判斷若是min>max就不存在
if (min>max){
return -1;
}
//最後返回的是索引值
return mid;
}
複製代碼
運行結果爲