分析数组
先定义一个数组: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;
}
复制代码
运行结果为