给定一个数组:
int a[]={28,39,49,78,23};
请对数组中的元素进行排序。
给定一个数字 x=49,
请在排序后的数组中查找该元素。
要求:
* 最好使用折半查找
* 排序和查找自己写函数实现,不要使用标准API。
public class Demo{
public static void main(String[] args){
int a[] = {28,39,49,78,23};
int x = 49;
//下面是最简单的冒泡排序
int temp;
for(int i=0; i<a.length;++i){
for(int j=a.length-1;j>i;--j){
if(a[j] <a[j-1]){
temp = a[j];
a[j] = a[j-1];
a[j-1] = temp;
}
}
}
System.out.println("排序完成:");
for(int emp:a){
System.out.print(emp+" ");
}
//下面是二分法查找(折中查找)
int first = 0;
int last = a.length-1;
int mid;
while(first<=last){
mid = (first+last)/2;
if(a[mid]==x){
System.out.println("\n查找到x,在数组的第"+(mid+1)+"位");
break;
}
if(a[mid]>x)
last = mid-1;
if(a[mid]<x)
first = mid+1;
}
}
}
public class Order {
private static int a[] ={28,39,49,78,23};
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
int c[]=sort(a);
System.out.println(c[0] + ".." + c[1]+ ".." + c[2]);
System.out.println(binarySearch(a,49));
}
/**
* 冒泡法排序
* @param a
* @return
*/
public static int[] sort(int[] a) {
int temp = 0;
for (int i = a.length - 1; i > 0; --i) {
boolean isSort = false;
for (int j = 0; j < i; ++j) {
//如果第一个比第二个大,就交换他们两个
if (a[j + 1] < a[j]) {
temp = a[j];
a[j] = a[j + 1];
a[j + 1] = temp;
isSort = true;
}
}
if (!isSort)
break;
}
return a;
}
/**
* 二分查找
* @param a
* @param key
* @return
*/
public static int binarySearch(int[] a, int key) {
if (a.length == 0)
return -1; // 开始位置
int first = 0; // 结束位置
int last = a.length - 1; // 中间位置
int mid; // 如果开始时,小于则结束.
while (first <= last) {
mid = (first + last) / 2;
// 如果等于key,返回这个数在数组中的位置.
if (a[mid] == key)
return mid;
// 如果大于key,则在左边.
if (a[mid] > key)
last = mid - 1;
// 如果小于key,则在右边
if (a[mid] < key)
first = mid + 1;
}
return -1;
}
}
结果
23..28..39我写的一个小例子,希望可以帮到你