数据结构(8)-JAVA-起泡排序和二分查找法

输入记录信息,使用起泡排序对记录进行升序排序,并采用二分查找查找指定key的记录是否存在。

项目结构:
在这里插入图片描述
程序设计思路:

  1. 定义记录类型Record

  2. 定义查找排序类Zsort设计起泡排序和二分查找算法

    初始化算法init()

    起泡排序算法bubbleSort()

    二分查找算法binSearch()

  3. 编写测试类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);
 }
}

实验结果截图

省略前几趟
在这里插入图片描述
测试查找不到的数据:
在这里插入图片描述

本文章仅供学习和参考,如果发现有问题的地方还请大家多多指正!

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

你白勺男孩TT

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值