最近在面试 每次总有几道算法题。算法 这种东西啊, 没有深入骨髓几天不用就忘了,现在来记录下。
求最值:
int a[]={21,213,55,78};
int max=a[0];
for(int k=0;k<a.lenth;k++){
if(max<a[k]){
max=a[k];
}
}
选择排序:
for(int i=0;i<a.lenth-1;i++){
for(int j=i+1;j<a.lenth;j++){
if(a[i]<a[j]){
int tmp =a[j];
a[j]=a[i];
a[i]=tmp;
}
}
}
冒泡排序:
for(int i=0;i<a.lenth-1;i++){
for(int j=0;j<a.lenth-1-i;j++){
if(a[j+1]<a[j]) {
int temp=a[j];
a[j+1]=a[j];
a[j]=a[j+1];
}
}
}
直接插入排序
for(int i=1;i<a.lenth;i++){
int j=i-1;
int temp=a[i];
for(;j>=0&&temp<a[j];j--){
a[j+1]=a[j]; //大于temp整体后移
}
a[j+1]=temp; //最低位
}
二分查找:
//循环形式
public static int binarySearch(int[] arr, int x) {
int low = 0;
int hight = arr.length - 1;
while (low <= hight) {
int middle = (hight + low) / 2;
if (x == arr[middle]) {
return middle;
} else if (x < arr[middle]) {
hight = middle - 1;
} else if (x > arr[middle]) {
low = middle + 1;
}
}
return -1;
}
//递归形式
protected static int binarySearch(int[] arr, int x, int beginIndex,
int endIndex) {
// 升序的数组
int midIndex = (beginIndex + endIndex) / 2;
if (x < arr[beginIndex] || x > arr[endIndex] || beginIndex > endIndex) {
return -1;
}
if (x < arr[midIndex]) {
return binarySearch(arr, x, beginIndex, endIndex - 1);
} else if (x > arr[midIndex]) {
return binarySearch(arr, x, beginIndex + 1, endIndex);
} else {
return arr[midIndex];
}
}