package com.zixue.StringBuilder;
public class BinarySearchDemo {
public static void main(String[] args) {
// TODO Auto-generated method stub
int[] i = {5,6,8,45,21,35,36,325,52,35,48};
bubbleSort(i);
int b = binarySearch(i,45);
System.out.println(b);
}
/**
* 二分查找法
* @param a
* @param key
* @return mid
*/
private static int binarySearch(int[] a, int key) {
int low = 0;
int high = a.length - 1;
while (low <= high) {
int mid = (low + high) >>> 1;
int midVal = a[mid];
if (midVal < key)
low = mid + 1;
else if (midVal > key)
high = mid - 1;
else
return mid; // key found
}
return -(low + 1); // key not found.
}
/**
* 冒泡排序法:
* 思想:两两比较
* 第一趟,会把第一大的放在i[n]
* 第二趟,会把第二大的放在i[n-1]
* 以此类推,经过n-1趟会把第n-1大,也就是倒数第二小的放在i[1];
* @param i
*/
public static void bubbleSort(int[] i){
for(int x = 0; x < i.length - 1; x++){ //因为经过n-1趟就可以排完
for(int y = 0; y < i.length - 1 - x; y++){ //每趟过后都会少一个元素参加比较
if(i[y] > i[y+1]){ //相邻的比较,把大的放在后面
int temp = i[x];
i[y] = i[y+1];
i[y+1] = temp;
}
}
}
}
/**
* 选择排序法:
* 思想:拿着每次的第一个数和后面每一个比较。
* 第一次在i[1]到i[n]中找出最小的放在i[1]
* 第二次在i[2]到i[n]中找出最小的放在i[2]
* 以此类推:最后在i[n-1]与i[n]中找出最小的放在i[n-1]中
* @param i
*/
public static void selectSort(int[] i){
for(int x = 0; x < i.length - 1; x++){ //经过n-1趟比较完
for(int y = x + 1; y < i.length ; y++){ //已经选出来的不参与比较,
if(i[x] > i[y]){ //每次都是一个数与它后面的数比较
int temp = i[x]; //把最小的数放在比较范围内的最前面
i[x] = i[y];
i[y] = temp;
}
}
}
}
}