Java
//冒泡排序(升序和降序) 两层循环,外层排序控制,【内层排序比较大小,交换位置】
public static int[] bubbleSort(int[] arr){
for (int i = 0; i < arr.length - 1; i++) {
for (int j = 0; j < arr.length - i - 1 ; j++) {
if(arr[j] > arr[j + 1]){
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
//最大元素找到
System.out.println("第" + (i + 1) + "趟排序");
for (int k = 0; k < arr.length; k++) {
System.out.println(arr[k] + " ");
}
}
return arr;
}
二分查找理论实践参考
http://www.sunchis.com/html/java/2011/0426/323.html
public static void main(String[] args) {
int[] arr = new int[]{2,3,6,4,8,5,9,11,15,12,14,13};
int value = 9;
//System.out.println(directSerach(arr, 18));
arr = MaoPaoSortTest.bubbleSort(arr);
binarySerach(arr, 18);
}
/** *//**
* 直接查找 优点:很好理解,适合数据量小的查找 缺点:数据量大速度很慢. 降低查找效率
*/
public static int directSerach(int[] arr, int value){
for (int i = 0; i < arr.length; i++) {
if(value == arr[i]){
return i;
}
}
return -1;
}
/** *//**
* 二分查找方法 待查找的数组要有序.将有序数组一分为二
* 定义最小索引值low、最大索引值high、定义中间索引值middle.
* while(condition), condition low<=high
* 根据最大索引值和最小索引值计算中间值索引值middle,并将arr[middle]值与value比较.
* 1.如果value等于arr[middle],则直接返回middle索引值.
* 如果value大于arr[middle],则数组分隔的左侧过滤掉.将low索引值重置:middle+1
* 如果value小于arr[middle],则数组分隔的右侧过滤掉.将high索引值重置:middle-1
*/
public static int binarySerach(int[] arr, int value){
int low = 0; //最小下标索引
int high = arr.length; //最大下标索引
int middle = 0; //中间索引
while (low <= high) {
middle = (high + low) / 2;
//test
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i]);
if(i == middle){
System.out.print("#");
}
System.out.print(" ");
}
System.out.println();
if(value == arr[middle]){
return middle;
}
if(value < arr[middle]){
high = middle - 1;
}
if(value > arr[middle]){
low = middle + 1;
}
}
return -1;
}
posted on 2012-01-14 15:39
David1228 阅读(238)
评论(0) 编辑 收藏