JAVA排序查找问题,回答后请私信我,

给定一个数组:

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;

}


}

}



温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-09-17

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
3

本回答被网友采纳
第2个回答  2013-09-17
package com.demo;

class ArrayDemo {
public static void main(String[] args) {
int[] arr = { 28, 39, 49, 78, 23 };
int key = 49;
arr = bubbleSort(arr);
System.out.print("\n排序后的数组是:");
for (int i : arr) {
System.out.print(i + ",");
}
System.out.println("\n" + key + "在数据中的位置是:" + halfSearch(arr, key));
}

/**
 * 折半查找:对于有序的数组来讲是比较有效率的;
 * 
 * @param arr
 * @param key
 * @return
 */
public static int halfSearch(int[] arr, int key) {
int min = 0, max = arr.length - 1, mid;
while (min <= max) {
mid = (max + min) >> 1;
if (key > arr[mid])
min = mid + 1;
else if (key < arr[mid])
max = mid - 1;
else
return mid;
}
return -1;
}

/**
 * 
 * 冒泡排序算法
 * 
 * @param args
 * @return
 */
public static int[] bubbleSort(int[] args) {// 冒泡排序算法
for (int i = 0; i < args.length - 1; i++) {
for (int j = i + 1; j < args.length; j++) {
if (args[i] > args[j]) {
int temp = args[i];
args[i] = args[j];
args[j] = temp;
}
}
}
return args;
}

/**
 * 
 * 选择排序算法
 * 
 * @param args
 * @return
 */
public static int[] selectSort(int[] args) {// 选择排序算法
for (int i = 0; i < args.length - 1; i++) {
int min = i;
for (int j = i + 1; j < args.length; j++) {
if (args[min] > args[j]) {
min = j;
}
}
if (min != i) {
int temp = args[i];
args[i] = args[min];
args[min] = temp;
}
}
return args;
}

/**
 * 
 * 插入排序算法
 * 
 * @param args
 * @return
 */
public static int[] insertSort(int[] args) {// 插入排序算法
for (int i = 1; i < args.length; i++) {
for (int j = i; j > 0; j--) {
if (args[j] < args[j - 1]) {
int temp = args[j - 1];
args[j - 1] = args[j];
args[j] = temp;
} else
break;
}
}
return args;
}
}

第3个回答  2013-09-17
直接用java里面的a.sort()方法就可以了,要是不会的话,冒泡排序也行,那个也可以
第4个回答  2013-09-17
public class Demo
{
public static void main(String[] args)
{
int a[]={28,39,49,78,23};

for(int i=0;i<a.length-1;i++)
{
for(int j=i+1;j<a.length;j++)
{
if(a[i]>a[j])
{
int k=a[i];
a[i]=a[j];
a[j]=k;
}
}
}

int arr=28;
int index=0;
int max=a.length;
int min=0;
while(true)
{
index=((min+max)>>>1)+1;

if(arr>a[index])
{
min=index+1;
}
else if(arr<a[index])
{
max=index-1;
}
else
{
System.out.println("索引"+index);
return;
}
}

}
}
第5个回答  2013-09-17
简单排序,升序,直接用Arrays.sort(a),然后查找49
第6个回答  2013-09-17

我写的一个小例子,希望可以帮到你


相似回答