这一篇,我将写一下常用的算法
简单二分查找配合冒泡排序(不提倡这两种结合)
public class 简单算法 {
public static void main(String[] args) {
/**
* 前提条件,我们需要的是将数组进行有序排序,不能是乱序的
*/
int arr[] = new int[]{1,2,54,4,64,600,66,74 };
System.out.println("排序前");
for(int ae : arr) {
System.out.print( ae + " ");
}
System.out.println();
Sort(arr);
System.out.println("排序后");
for(int ae : arr) {
System.out.print( ae + " ");
}
System.out.println();
//采用的是二分查找
int search = TwoSearch(arr,4); //给定一个数组,要求从数组中查找某个具体的值
System.out.println("输出查到的数值的数组下标位置为");
System.out.println(search);
}
public static int TwoSearch(int arr[],int data) {
//定义两个指针,第一个指向第一个数据和最后一个数据
int left = 0;
int right = arr.length - 1; //指向数组的最后一个值
//当两个指针不相等,那么数组就没有被完全遍历完。
while(left <= right) {
//我们从中间值开始判断
int mid = (left + right) / 2;
if(arr[mid] == data) {
//如果中间值数字等于我们想要的那个值
return mid; //直接返回
}else if(arr[mid] < data){
//如果这个数小于我们想要的值,那么说明这个值在右边
left = mid + 1;
}else {
//否则的话,这个数必定在左边
right = right - 1 ;
}
}
return -1;
}
//冒泡排序
public static void Sort(int a[]) {
//对数组进行有序排序
//先对数组进行排序
for(int i = 0 ; i <a.length ; i++) {
for(int j =0; j <a.length - i -1; j++) {
int temp = 0; //定义一个存储变量
if(a[j] > a[j+1]) { //判断前后两个数值的大小
temp = a[j +1]; //将后边小的数存到temp中去
a[ j +1 ] = a[j]; //交换两个数值位置
a[j] = temp;
}
}
}
}
}
结果如下
排序前
1 2 54 4 64 600 66 74
排序后
1 2 4 54 64 66 74 600
输出查到的数值的数组下标位置为
2