一、数组翻转:
1.概述:数组对称索引位置上的元素互换
写法一:
java
public class Reverse {
public static void main(String[] args) {
int[] arr = {1, 2, 3, 4, 5, 6, 7};
for (int min = 0, max = arr.length-1; min < max; min++, max--) {
int temp = arr[min];
arr[min] = arr[max];
arr[max] = temp;
}
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + " ");
}
}
}
写法二:
java
public class ReverseT {
public static void main(String[] args) {
int[] arr = {1, 2, 3, 4, 5, 6, 7};
int[] arrN = reverse(arr);
for (int i = 0; i < arrN.length; i++) {
System.out.print(arrN[i] + " ");
}
}
public static int[] reverse(int[] arr){
for (int min = 0,max = arr.length-1; min < max; min++,max--) {
int temp = arr[min];
arr[min] = arr[max];
arr[max] = temp;
}
return arr;
}
}
写法二用了新定义一个静态方法,然后用主类去调用方法来实现,但是要注意的是,直接在方法参数处是不允许初始化数组的,所以写法二会繁琐很多。
2.冒泡排序:进行数组元素的大小比较,然后进行位置交换;冒泡是相邻元素进行比较换位。
java
public class Bubble {
public static void main(String[] args) {
int[] arr = {7,6,5,4,3,2,1};
for (int l = 0; l < arr.length-1; l++) {
for (int i = 0; i < arr.length-1; i++) {
if (arr[i] > arr[i+1]){
int temp = arr[i];
arr[i] = arr[i+1];
arr[i+1] = temp;
}
}
}
for (int j = 0; j < arr.length; j++) {
System.out.print(arr[j] + " ");
}
}
}
3.二分查找:
(1)前提:数组中的数据必须是有序的(所以在代码里,嵌套了上面的冒泡排序);
(2)思想:a.老式查找需要遍历数组,效率低;
b.二分法可以每次从中间数组查找,每次查询可以淘汰一半数据;
java
public class Binary {
public static void main(String[] args) {
int[] arr = {3, 7, 5, 4, 3, 2, 1};
for (int l = 0; l < arr.length - 1; l++) {
for (int i = 0; i < arr.length - 1; i++) {
if (arr[i] > arr[i + 1]) {
int temp = arr[i];
arr[i] = arr[i + 1];
arr[i + 1] = temp;
}
}
}
int index = binary(arr, 7);
System.out.println(index);
}
public static int binary(int[] arr, int data){
int max = arr.length-1;
int min = 0;
int mid = 0;
while (min <= max){
mid = (min + max)/2;
if (data > arr[mid]){
min = mid + 1;
}else if(data < arr[mid]){
max = mid -1;
}else{
return mid;
}
}
return -1;
}
}