java选择排序和二分查找
2009-08-23 12:44 BlueDream 阅读(994) 评论(0) 编辑 收藏 举报package cn.com.exception;
public class Search
{
public static void main(String[] args)
{
int[] arr = {1,3,4,56,34,22,35,87,23};
Search.searchSort(arr);
for(int e: arr){
System.out.print(e + " ");
}
System.out.println();
int index = Search.binarySearch(arr, 22);
System.out.println(index);
}
// 选择排序(主要是用K记录位置避免多次交换)
public static void searchSort(int[] a){
int temp, k;
for(int i = 0; i < a.length; i++){
k = i;
for(int j = k + 1; j < a.length; j++){
if(a[j] < a[k]){
k = j;
}
}
if(k != i){
temp = a[i];
a[i] = a[k];
a[k] = temp;
}
}
}
// 二分法查找(每次折半根据与中间位置的对比向左向右继续折半)
public static int binarySearch(int[] a, int num){
if(a.length == 0) return -1;
int startPos = 0;
int endPos = a.length - 1;
int m = (startPos + endPos) / 2;
while(startPos <= endPos){
if(num == a[m]) return m;
if(num > a[m]){
startPos = m + 1;
}
if(num < a[m]){
endPos = m - 1;
}
m = (startPos + endPos) / 2;
}
return m;
}
}
public class Search
{
public static void main(String[] args)
{
int[] arr = {1,3,4,56,34,22,35,87,23};
Search.searchSort(arr);
for(int e: arr){
System.out.print(e + " ");
}
System.out.println();
int index = Search.binarySearch(arr, 22);
System.out.println(index);
}
// 选择排序(主要是用K记录位置避免多次交换)
public static void searchSort(int[] a){
int temp, k;
for(int i = 0; i < a.length; i++){
k = i;
for(int j = k + 1; j < a.length; j++){
if(a[j] < a[k]){
k = j;
}
}
if(k != i){
temp = a[i];
a[i] = a[k];
a[k] = temp;
}
}
}
// 二分法查找(每次折半根据与中间位置的对比向左向右继续折半)
public static int binarySearch(int[] a, int num){
if(a.length == 0) return -1;
int startPos = 0;
int endPos = a.length - 1;
int m = (startPos + endPos) / 2;
while(startPos <= endPos){
if(num == a[m]) return m;
if(num > a[m]){
startPos = m + 1;
}
if(num < a[m]){
endPos = m - 1;
}
m = (startPos + endPos) / 2;
}
return m;
}
}