常见的查找方法:
第一种顺序查找:也就是按顺序一位一位的查找,找到要查找数的索引(下标)。
弊端:数据量大的时候,在最差的情况下,计算机的负载也非常的大,效率低。
public static void main(String[] args) {
System.out.println("请输入要查找的数");
Scanner scanner = new Scanner(System.in);
int num = scanner.nextInt();
int[] arr = {2,4,6,8,10,12,14,16};
int index = find(arr,num);
if (index == -1){
System.out.println("找不到该数");
}else {
System.out.println("查找到的该数的下标为" + index);
}
}
/**
*
* @param arr 查找的数组
* @param num 待查找的数
* @return -1-没有找到,>=0-下标
*/
public static int find(int[] arr,int num){
for (int i = 0;i<arr.length;i++){
if (arr[i] == num) {
return i;
}
}
return -1;
}
第二种折半查找(二分查找):优化了查找的效率。
弊端:数组必须经过排序。
public static void main(String[] args) {
System.out.println("请输入要查找的数");
Scanner sc = new Scanner(System.in);
int num = sc.nextInt();
int[] arr = {2, 4, 6, 8, 10, 12, 14, 16,18};
int index = find(arr,num);
System.out.println("查找到的该数的下标为" + index);
}
/**
* 二分查找
* @param arr 查找的数组
* @param num 待查找的数
* @return 返回查找到的数的下标
*/
private static int find(int[] arr,int num) {
int start = 0;
int end = arr.length-1;
int mid = (start+end)/2;
while (num != arr[mid]){
if (arr[mid] > num){
end=mid-1;
}else {
start=mid+1;
}
mid = (start+end)/2;
}
return mid;
}
数组的排序:
方法一:冒泡排序
冒泡排序(Bubble sort):相邻的两个数逐个的做比较,如果前一个数比后一个数小那么就交换过来,当第一轮比较完毕后最小的值一定产生在末尾,每一轮比较都会产生一个最小值
public static void main(String[] args) {
int[] a = {22, 87, 52, 11, 88, 24};
bubble(a);
write(a);
}
public static void bubble(int[] a){
for (int j = 1; j <= a.length - 1; j++) {
for (int i = 0; i <= a.length - j - 1; i++) {
if (a[i] > a[i + 1]) {
int t = a[i];
a[i] = a[i + 1];
a[i + 1] = t;
}
}
}
}
public static void write(int[] a) {
for (int i : a) {
System.out.print(i + " ");
}
}
方法二:选择排序
public static void main(String[] args) {
int[] a = {22, 87, 52, 11, 88, 24};
int n = a.length;
for (int i = 1;i<=n-1;i++){
//找出最大元素的位置
int maxIndex = 0;
for (int j = 1; j <= n - i; j++) {
if (a[j] > a[maxIndex]) {
maxIndex = j;
}
}
//将最大数调到最后
int t = a[maxIndex];
a[maxIndex] = a[n - i];
a[n - i] = t;
}
write(a);
}
public static void write(int [] a){
for (int i :a){
System.out.print(i+" ");
}
}
方法三:倒置数组
找到数组的每个数的对称的数,交换即可
public static void main(String[] args) {
int[] array = {4,6,7,8,9,20,40,50};
reverseArray(array);
printArray(array);
}
public static void reverseArray(int[] array){
for (int i = 0;i < array.length/2;i++){
int temp = array[i];
array[i] = array[array.length-i-1];
array[array.length-i-1] = temp;
}
}
public static void printArray(int[] array){
for (int i = 0;i < array.length;i++){
System.out.print(array[i] + "\t");
}
}