冒泡排序
基本思想:通过逐个比较相邻元素,根据结果交换二者值。
优化之处:由于可能在排序的过程中已经完成了排序,所以可在每次结束一轮排序时进行判断是否需要继续比较排序。
public static int[] sort(int[] arr){
boolean flag;
for (int i =0;i<arr.length-1;i++){
flag = true;
for (int j =0;j<arr.length-1;j++){
if (arr[j]>arr[j+1]){ //交换值
flag = false; //表示该轮进行了数值交换
arr[j]=arr[j]^arr[j+1];
arr[j+1]=arr[j+1]^arr[j];
arr[j]=arr[j]^arr[j+1];
}
}
if (flag){ //判断该轮排序是否有数值进行了交换
break;
}
}
return arr;
}
二分法查找
基本思想:对已经进行过从小到大排序的数组,不断折中取出元素,并与目标元素进行比较,根据结果继续折中直到找到目标元素或循环结束。
public static int binary(int arr[],int key){
int max =arr.length-1;
int min =0;
int mid;
while(min!=max){
mid=(max+min)>>1; //放循环里面
if (key>arr[mid]){
min = mid+1;
}
if (key<arr[mid]){
max = mid-1;
}
if (key == arr[mid]){
return mid;
}
}
return -1; //表示没找到
}