java初识之排序神操作
1.数组反转
解法:
1.第一个数和最后一个数换 依次换。。。。
array[0] 和array[length -1 - 0]
array[1] 和array[length -1 - 1]
array[2] 和array[length -1 - 2]
2.一共操作length/2整数次,length为数值长度
代码如下:
int a;
for (int i = 0; i < array.length / 2; i++)
{
a = array[i];
array[i] = array[array.length - 1 - i];
array[array.length - 1 - i] = a;
}
2.冒泡排序
解法
1.原理:相邻两个数进行比较 交换位置 最值放在数组的 最边缘
2.一共操作n-1趟,每趟操作n-i-1次,n为数组数值个数,i为第几趟
代码解析:
int a;定义一个中间变量a
for (int i = 0; i < arry.length - 1; i++) {
for (int j = 0; j < arry.length - i - 1; j++) {
if (arry[j] >= arry[j + 1]){
a = arry[j];
arry[j] = arry[j + 1];
arry[j + 1] = a;
}
}
}
3.选择排序
解法
1.原理:选择一个数 和依次和下一个数比较换位;
代码解析;
int a;
for (int i = 0; i < array.length - 1; i++)
{
for (int j = i + 1; j <array.length; j++)
{
if(array[i] <= array[j]) {
比大小,大于第i个数则互换换位置
a = array[i];
array[i] = array[j];
array[j] = a;
}
}
}
折半查找法(可以提高效率的查找)
解法:
1.原理:不断的进行区间折半取范围值,直到确定目标值。
2.前提:数组中查找 查找这个数在数组中的角标(位置)。
3..注意:要在有序的数值中查找
代码解析:
int[] array = new int[] {1,2,3,4,5,6,7,89,90};
int max = array.length;
int min = 0;
int mid = (min + max) / 2;
int key = 89;
while (array[mid] != key) {
if (key < array[mid]) {
max = mid - 1;
} else if(key > array[mid]) {
min = min + 1;
mid = (min + max) / 2;
if (max < min) {
mid = -1;
break;
}
}
}System.out.println("这个数的角标是:"+ mid);
}