该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
package test;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
/**
*
* @author 作者 张翔
* @date 创建时间:2008-12-4 上午09:07:43
*
*/
public class TestSort {
/**
* @param args
* @throws Exception
*/
public static void main(String[] args) throws Exception {
System.out.println("请输入任意10个整形数,以“;”隔开(0-65535):");//55;44;66;33;77;22;88;11;99;2
BufferedReader bufferedreader = new BufferedReader(
new InputStreamReader(System.in));
String inputstring = bufferedreader.readLine();
String numStr[] = inputstring.split(";");
if (numStr.length != 10) {
throw new Exception("输入数据不符合规范!");
}
int num[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
for (int i = 0; i
num[i] = Integer.parseInt(numStr[i]);
}
//排序
sort(num);
System.out.println("请输入任意1个整形数:");
bufferedreader = new BufferedReader(new InputStreamReader(System.in));
inputstring = bufferedreader.readLine();
int inputNum = Integer.parseInt(inputstring);
int res = query(num,inputNum);
if(res == -1){
System.out.println("数据不存在!");
}else{
res++;
System.out.println("查询数据在队列中的位置为:" + res);
}
}
/**
* 排序
* @param r
*/
private static void sort(int r[]) {
int temp;
int i, j, low, hight, m;
for (i = 1; i
/* r[0] 已经有序,从r[1]开始*/
if (r[i]
low = 0;
hight = i - 1;
/*折半查找法,寻找插入位置*/
while (low <= hight) {
m = (low + hight) / 2;
if (r[m] > r[i])
hight = m - 1;
if (r[m]
low = m + 1;
if (r[m] == r[i]) {
hight = m;
break;
}
} /*while*/
/* r[i] 应该插在high+1的位置上 */
temp = r[i];
j = i - 1; /*保存r[i],同时留出移动的空间*/
while (j >= hight + 1) {
r[j + 1] = r[j];
j--;
} /*移动数据*/
r[hight + 1] = temp; /*插入*/
}
System.out.print("第" + i + "次排序后,当前序列为:");
for(int x = 0;x
System.out.print(r[x] + ",");
}
System.out.println(r[r.length -1]);
}
}
/**
* 查找
* @param r
* @param key
*/
private static int query(int r[],int key) {
int low,high,mid;
low=0;high=r.length-1;
while (low<=high) {
mid=(low+high)/2;
if(r[mid]==key) return mid;
if(r[mid]>key) high=mid-1;
if(r[mid]
} /*while*/
return-1;
}
}