输入记录信息,使用起泡排序对记录进行升序排序,并采用二分查找查找指定key的记录是否存在。
项目结构:
程序设计思路:
-
定义记录类型Record
-
定义查找排序类Zsort设计起泡排序和二分查找算法
初始化算法init()
起泡排序算法bubbleSort()
二分查找算法binSearch()
-
编写测试类Test调用功能方法
核心代码:
Record.java:
package ds.sort;
/**
* 定义记录类型
* @author 1
*
*/
public class Record {
//关键字key
private int key;
//其他数据other
private Object other;
public Record(int key, Object other) {
super();
this.key = key;
this.other = other;
}
public Record() {
super();
}
public int getKey() {
return key;
}
public void setKey(int key) {
this.key = key;
}
public Object getOther() {
return other;
}
public void setOther(Object other) {
this.other = other;
}
}
Zsort.java
/**
* 定义查找排序类,设计气泡排序和二分查找算法
*
* @author 1
*
*/
public class Zsort {
// 存储记录的数组r
private Record[] r;
// 构造方法,初始化数组r
public Zsort(int n) {// 传参
r = new Record[n];
// 输入每条记录的数据
Scanner in = new Scanner(System.in);
for (int i = 0; i < n; i++) {
System.out.print("请输入第" + (i + 1) + "条记录的关键字和其他:");
r[i] = new Record();
r[i].setKey(in.nextInt());
r[i].setOther(in.next());
}
}
// set和get方法
public Record[] getR() {
return r;
}
public void setR(Record[] r) {
this.r = r;
}
// 气泡排序法bubbleSort
public void bubbleSort() {
boolean flag = true;// 标记是否发生交换操作
Record temp = new Record();
for (int i = 1; i < r.length - 1; i++) {// 排序的次数 i:1~n-1
flag = true;// 记录未比较 //flag:true
for (int j = r.length - 1; j >= i; j--) {// j:n-1~i
if (r[j].getKey() < r[j - 1].getKey()) {// 比较下标为j元素的Key和前一个元素的key:反序
temp = r[j];
r[j] = r[j - 1];
r[j - 1] = temp;
flag = false;// 变false
}
}
// 输出本次排序结果
System.out.print("第" + i + "趟排序结果是:");
for (int j = 0; j < r.length; j++) {
System.out.println(r[j].getKey() + ":" + r[j].getOther() + "\t\t");
}
if (flag) {
break;// 跳出
}
}
}
// 二分查找法binSearch(key)
public int binSearch(int key) {
int low = 0, high = r.length - 1, mid;//查找范围的上界和下界
while (low <= high) {
mid = (low + high) / 2;//中间位置,当前比较的数据元素位置
if (r[mid].getKey() == key){
System.out.print("关键字为:"+r[mid].getKey()+" 其他为:"+r[mid].getOther());
return mid;//查找成功
}
if (key < r[mid].getKey()) {//给定值更小
high = mid - 1;//查找范围缩小到前半段
} else {
low = mid + 1;//查找范围缩小到后半段
}
}
System.out.println("该关键字不存在!");
return -1;//查找失败
}
}
Test.java
public class Test {
public static void main(String[] args) {
Zsort zs = new Zsort(8);
zs.bubbleSort();
Scanner in = new Scanner(System.in);
System.out.println("请输入一个你要查找的关键字:");
int key = in.nextInt();
zs.binSearch(key);
}
}
实验结果截图
省略前几趟
测试查找不到的数据:
本文章仅供学习和参考,如果发现有问题的地方还请大家多多指正!