数据结构实验五-查找与排序的实现
数据结构查找排序实验报告
贵州大学实验报告
学院:电子信息学院专业:通信工程班级:2012级1班姓名学号实验组实验时间2014.5.15 指导教师成绩
实验项目名称查找排序
实
验目的和要求
1、掌握常用的查找、排序方法,及相应的算法实现。
2、能实现并应用某一种查找算法。理解各种排序方法的特点,并能加以灵活应用。
3、了解各种排序算法的时间复杂度分析。
实
验原理1、根据实验内容编程,上机调试、得出正确的运行程序。
2、编译运行程序,观察运行情况和输出结果。
实
验
仪
器
运行Visual c++的微机一台
实验内容和步骤1、查找相关实验内容及步骤。
①建立顺序存储结构,构建一个顺序表,实现顺序查找算法。
typedef struct {
ElemType *elem; //数据元素存储空间基址,建表时按实际长度分配,号单元留空
int length; //表的长度
} SSTable;
②对顺序表先排序后,实现行二分法查找相关操作。
③定义二叉树节点,根据节点的值进行查找,并且实现节点的插入,删除等操作。
typedef struct BiTnode { //定义二叉树节点
int data; //节点的值
struct BiTnode *lchild,*rchild;
}BiTnode,*BiTree;
④定义哈希表以及要查找的节点元素,创建哈希表,实现其相关查找操作。
typedef struct {
int num;
} Elemtype; //定义查找的结点元素
typedef struct {
Elemtype *elem; //数据元素存储基址
int count; //数据元素个数
数据结构实验五-查找与排序的实现
实验报告
课程名称数据结构实验名称查找与排序得实现
系别专业班级指导教师11
学号姓名实验日期实验成绩
一、实验目得
(1)掌握交换排序算法(冒泡排序)得基本思想;
(2)掌握交换排序算法(冒泡排序)得实现方法;
(3)掌握折半查找算法得基本思想;
(4)掌握折半查找算法得实现方法;
二、实验内容
1.对同一组数据分别进行冒泡排序,输出排序结果。要求:
1)设计三种输入数据序列:正序、反序、无序
2)修改程序:
a)将序列采用手工输入得方式输入
b)增加记录比较次数、移动次数得变量并输出其值,分析三种序列状态得算法时间复杂性
2.对给定得有序查找集合,通过折半查找与给定值k相等得元素。
3.在冒泡算法中若设置一个变量lastExchangeIndex来标记每趟排序时经过交换得最后
位置,算法如何改进?
三、设计与编码
1、本实验用到得理论知识
2、算法设计
3、编码
package sort_search;
import java、util、Scanner;
publicclass Sort_Search{
//冒泡排序算法
ﻩpublic voidBubbleSort(int r[]){
int temp;
ﻩint count=0,move=0;
ﻩboolean flag=true;
ﻩfor(int i=1;i〈r、length&&flag;i++){
ﻩﻩflag=false;
ﻩﻩcount++;
ﻩfor(intj=0;j<r、length-i;j++){
if(r[j]>r[j+1]){
ﻩtemp=r[j];
ﻩﻩﻩr[j]=r[j+1];
数据结构课程设计——排序与查找
北京信息科技大学
课程设计报告
课程名称数据结构课程设计
题目排序与查找
指导教师赵庆聪
设计起止日期
设计地点
系别信息管理学院
专业__信息管理与信息系统_
姓名/学号______鲁丹2012012108__
b=SelectSort(L);
display(L);
printf("此排序法关键字比较的次数为:%d\n",b);
printf("\n快速排序输出的顺序表为:\n");
c=QuickSort(L,1,20);
display(L);
printf("此排序法关键字比较的次数为:%d\n",c); printf("\n双向起泡法排序输出的顺序表为:\n");
d=BubbleSort(L);
display(L);
printf("此排序法关键字比较的次数为:%d\n",d);
}
1.#include "stdio.h"
2.#include "stdlib.h"
3.#include "string.h"
4.#include "time.h"
5.#include "limits.h"
6.#define MAXITEM 1000
7.typedef int KeyType,ElemType;
8.int count1=0,count2=0,count3=0,count4=0,count5=0,count6=0;
9.int swap1=0,swap2=0,swap3=0,swap4=0,swap5=0,swap6=0;
10.typedef struct rec
11.{
12. KeyType key;
13. ElemType data;
数据结构排序实验报告
数据结构排序实验报告
数据结构排序实验报告
引言:
数据结构是计算机科学中的重要概念之一,它涉及到数据的组织、存储和操作
方式。排序是数据结构中的基本操作之一,它可以将一组无序的数据按照特定
的规则进行排列,从而方便后续的查找和处理。本实验旨在通过对不同排序算
法的实验比较,探讨它们的性能差异和适用场景。
一、实验目的
本实验的主要目的是通过实际操作,深入理解不同排序算法的原理和实现方式,并通过对比它们的性能差异,选取合适的排序算法用于不同场景中。
二、实验环境和工具
实验环境:Windows 10 操作系统
开发工具:Visual Studio 2019
编程语言:C++
三、实验过程
1. 实验准备
在开始实验之前,我们需要先准备一组待排序的数据。为了保证实验的公正性,我们选择了一组包含10000个随机整数的数据集。这些数据将被用于对比各种
排序算法的性能。
2. 实验步骤
我们选择了常见的五种排序算法进行实验比较,分别是冒泡排序、选择排序、
插入排序、快速排序和归并排序。
- 冒泡排序:该算法通过不断比较相邻元素的大小,将较大的元素逐渐“冒泡”到数组的末尾。实现时,我们使用了双重循环来遍历整个数组,并通过交换元素的方式进行排序。
- 选择排序:该算法通过不断选择数组中的最小元素,并将其放置在已排序部分的末尾。实现时,我们使用了双重循环来遍历整个数组,并通过交换元素的方式进行排序。
- 插入排序:该算法将数组分为已排序和未排序两部分,然后逐个将未排序部分的元素插入到已排序部分的合适位置。实现时,我们使用了循环和条件判断来找到插入位置,并通过移动元素的方式进行排序。
数据结构实验--各种排序算法的比较
实验题目:各种查找及排序算法比较
实验内容:
内部排序算法——插入排序(直接插入排序、折半插入排序)、交换排序(冒泡、快速排序)、选择排序(直接选择排序、堆排序)和归并排序(2-路归并排序)的具体实现。
目的与要求:
掌握各种内部排序算法的特点,并对一整型数组排序,比较不同算法的速度。
实验算法:
1)、数据结构描述:
主函数中的a数组保存需要排序数组,将数组作为自变量输入到各种
排序算法的函数中,各个函数返回值为排序之后的数组,在主函数中
以一个循环体输出。
2)、函数和算法描述:
主函数main先用循环体保存数组a,然后输出菜单,通过switch语
句调用排序函数,将数组排序后输出。
InsertSort为直接插入排序对应的函数,并附有插入元素到数组的功能,函数主体是从数组第二个元素开始与其前的元素一一比较大小,
并且插入到合适位置使得该元素的大小位于相邻元素之间。
BinsertSort为折半插入排序对应的函数,函数主体是在如上所述进行插入时,先比较待插入元素与其前的有序列的中心元素的大小关系,
以此循环来判断插入位置。
BubbleSort为冒泡排序对应的函数,为二重循环结构,外循环每循环一次,决定出待排序部分的最大值并置于待排部分的末端,内循环
对相邻两个元素大小作比较,进行调换。
Partition QuickSort为快速排序对应的函数,建有两个指针,从待
排部分两端进行扫描,一次循环之后,将极大值和极小值各置于一端。
SelectMinKey SSSort为选择排序对应的函数,每循环一次,直接选出待排序部分中最小的元素并置于已排序部分之后,直至待排部分
数据结构实验报告五,查找与排序-
数据结构实验报告五,查找与排序-
查找与排序
一、实验目的:
1.理解掌握查找与排序在计算机中的各种实现方法。
2.学会针对所给问题选用最适合的算法。
3.熟练掌握常用排序算法在顺序表上的实现。
二、实验要求:
掌握利用常用的查找排序算法的思想来解决一般问题的方法和技巧,进行算法分析并写出实习报告。
三、实验内容及分析:
设计一个学生信息管理系统,学生对象至少要包含:学号、性别、成绩1、成绩总成绩等信息。要求实现以下功能:
1.平均成绩要求自动计算;
2.查找:分别给定学生学号、性别,能够查找到学生的基本信息(要求至少用两种查找算法实现);
3.? 排序:分别按学生的学号、成绩1、成绩2、平均成绩进行排序(要求至少用两种排序算法实现)。
四、程序的调试及运行结果
五、程序代码
#includestdio.h
#includestring.h
struct student//定义结构体
{
char name;
int a1,a2,a3,num;
double pow;
}zl;
int count=0;
void jiemian1(); //主界面//函数声明
int jiemian2(); //选择界面
void luru(); //录入函数
void xianshi(); //显示
void paixv(); //排序
void diaoyong(int); //循环调用选择界面
void tianjia(); //添加信息
void chaxun1(); //按学号查询详细信息
void chaxun2(); //按姓名查询详细信息
void xiugai(); //修改信息
数据结构查找与排序
位置
100 101 102 103 104 105 106 107 108 109
关键字
79
61
49
53 63
75 46 17 98 19
冲突次数
1
0
3
0
1
0
0
000
查找时比较次数 2
1
4
1
2
1
1
111
查找成功时的平均搜索长度:(2 + 1 + 4 + 1+ 2 + 1 + 1 + 1 + 1 + 1)/10=1.5
• 快速排序算法关键字的比较和交换也是跳跃式进行的,所以快速排序 算法也是一种不稳定的排序方法。
• 由于进行了递归调用,需要一定数量的栈O(log2n)作为辅助空间
例如
1、快速排序算法在 数据元素按关键字有序的 情况下最不利于发挥其长处。
2、设关键字序列为:49,38,66,80,70,15,22,欲对该序列进行从小到大排序。 采用待排序列的第一个关键字作为枢轴,写出快速排序法的一趟和二趟排序之 后的状态
图所示:
0
初始关键字序列:
29 29 38 22 45 23 67 31
j前移2个位置后, R[j]放在R[i]的位置:
i后移1个位置后, R[i]放在R[j]的位置:
数据结构实验报告 实验五 查找算法
昆明理工大学信息工程与自动化学院学生实验报告
(201 —201 学年第一学期)
课程名称:数据结构开课实验室:年月日年级、专业、班学号姓名成绩
实验项目名称查找算法指导教师
教
师
评语教师签名:
年月日
一.实验内容:
查找算法,其中线性表的查找包括顺序查找,二分查找,分块查找;树表的查找包括二叉排序树等;还有散列表的查找等等。
二.实验目的:
1.掌握各种查找算法理解和实现;
2.增强上机编程调试能力;
三.主要程序代码分析:
typedef struct
{
int Key; //关键项
}ElemType;
int Search_Seq(SSTable ST,int Key) //顺序查找
{
int i;
ST.elem[0].Key=Key; //设置监视哨
for(i=ST.length;ST.elem[i].Key!=Key;i--);
return i;
}
int Search_Bin(SSTable ST,int Key) //在有序表中进行二分查找{
int low=1;
int high=ST.length; //置查找区间的上、下届初值int mid;
count=0;
while(low<=high) //当前查找区间非空
{
count++;
mid=(low+high)/2;
if(ST.elem[mid].Key==Key)
return mid; //查找成功,返回
else if(Key<ST.elem[mid].Key)
high=mid-1; //缩小查找区间为左子表else
low=mid+1; //缩小查找区间为右子表}
数据结构实验五查找算法应用
数据结构实验五查找算法应用
天津理工大学实验报告学院(系)名称: 计算机与通信工程学院
姓名学号专业计算机科学与技术班级2009 级 1 班实验项目实验五查找算法应用
课程名称数据结构与算法课程代码
实验时间2011年6月9日第5-8节实验地点7 号楼215 批改意见成绩教师签字:
实验五查找算法应用
实验时间:2011 年6月9日12:50 -15:50(地点:7-215)
实验目的:理解二叉排序树、AVL树的查找、插入、删除、建立算法的思想及程序实现; 掌握散列存储结构的思想,能选择合适散列函数,实现不同冲突处理方法的散列表的查找、建立。散列表等查找算法解决实际问题。
具体实验题目:(任课教师根据实验大纲自己指定)每位同学可从下面题目中选择1-2 题实现: 1(哈希表查找
1)问题描述:针对某个集体的“人名”构造哈希表,解决按“人名”进行查找的索引结构。
2)实验要求:要求表的平均查找长度不超过R,完成相应的建表和查表程序。
2(构造二叉排序树,并进行中序遍历
1)问题描述:从键盘读入一串整数构造一棵二叉排序树,并对得到的二叉排序述进行中序遍历,得到有序序列。
2)实验要求: 该二叉排序树以二叉链表存储
实验报告格式及要求: 按学校印刷的实验报告模版书写。(具体要求见四)第1页共3页
实验思路: 首先定义二叉链表的存储结构,定义左右孩子,用递归算法定义插入二叉排序树,按照左小于中小于右,即程序中的insert() 函数。然后是生成二叉树的
算法,即CreateTree() 函数,最后是中序遍历的递归算法的算法,即
数据结构 查找 实验报告
数据结构查找实验报告
数据结构查找实验报告
1. 简介
查找是计算机科学中一种常见的操作,它用于在一组数据中快
速定位特定的元素。数据结构是计算机存储、组织数据的方式,可
以有效地支持查找操作。本实验报告将介绍查找算法的原理和实现,以及实验结果的分析和总结。
2. 查找算法
2.1 顺序查找
顺序查找是一种简单直观的查找算法,它从数据集的第一个元
素开始逐个比较,直至找到目标元素或遍历完所有元素。顺序查找
的时间复杂度为O(n),其中n是数据集的大小。
2.2 二分查找
二分查找是一种高效的查找算法,它要求数据集必须是有序的。它通过将数据集分成两部分,并与目标元素进行比较,以确定目标
元素所在的区间,然后在该区间内继续二分查找,直至找到目标元
素或确定目标元素不存在。二分查找的时间复杂度为O(log n),其
中n是数据集的大小。
2.3 插值查找
插值查找是对二分查找的一种改进,它根据目标元素的估计位
置来确定比较的起始位置。它适用于数据集分布均匀的情况,可以
进一步减少查找的次数。插值查找的时间复杂度为O(log(log n))。
3. 实验结果
本次实验我们使用了三种查找算法(顺序查找、二分查找和插
值查找)在不同大小的数据集上进行了性能测试。实验结果如下表
所示:
---- 数据集大小 ---- 顺序查找时间(ms) ---- 二分查找时
间(ms) ---- 插值查找时间(ms) ----
-------------------------------------------------------
-------------------------------
数据结构实验报告——查找与排序
哈尔滨工业大学(深圳)
数据结构实验报告
查找与排序
学院: 计算机科学与技术
一、问题分析
此题是一道排序问题,排序的方法有很多种,此题我用的是堆排序,这是一种不稳定排序,但时间复杂度较低,比较快。计算机首先需要把文件中的数据读入内存中,用动态数组存储数据,然后建立数据结构,然后建立堆,比较子节点和父节点大小,降序排列,之后互换头结点与尾节点,再递归重复即可。查找的话,依次查找对比即可。
二、详细设计
2.1 设计思想
将股票的代码,交易日期,及开盘价等信息分别用不同的动态数组存储起来。因为要根据交易量的降序进行排序所以应将交易量的信息另外用一个float型的数组保存起来便于比较。
排序:使用一个下标数组用来模拟交易量的堆排序,将下标数组进行降序排序。再根据下标数组里的值将股票信息保存在新的文件中。
查看:因为录入文件时是先把股票的代码相同的信息存入数组的。所以查找时比较股票的代码,找到该代码后比较交易日期。最后输出交易量。
2.2 存储结构及操作
(1) 存储结构(一般为自定义的数据类型,比如单链表,栈等。)
vector<string> a;//股票代码
vector<string> b;//股票交易日期
vector<string> c;//股票开盘价_最高价_最低价_收盘价
vector<float> d;//将交易量转换为float用于比较不过有的会被舍去vector<string> e;//交易量的原始数据用于输出到排序的文件中
(2)涉及的操作(一般为自定义函数,可不写过程,但要注明该函数的含义。)
数据结构 实验五 查找和排序应用
实验五查找和排序应用
一、实验目的
1.掌握查找的不同方法,并能用高级语言实现查找算法。
2.熟练掌握顺序表和有序表的顺序查找和二分查找方法。
3.掌握排序的不同方法,并能用高级语言实现排序算法。
4.熟练掌握顺序表的选择排序、冒泡排序和直接插入排序算法的实现。
二、实验内容
1.学生信息如下:
学号姓名数据结构程序设计
1 王立76 88
2 张秋88 77
3 刘丽79 65
4 王通86 85
5 赵阳71 90
6 李艳68 70
7 钱娜89 95
8 孙胜60 76
2.创建顺序查找表,输入学生信息。
【选做:也可以将学生信息存入文件,直接从文件读取学生信息】
3.使用顺序查找方法按姓名查找学生。如果查找成功,则显示该生的相关信息;如果查找不成功,则给出相应的提示信息。
4.使用二分查找方法,查找学生学号信息。如果查找成功,则显示该生的相关信息;如果查找不成功,则给出相应的提示信息。
5.使用直接插入排序方法,对学生信息中的姓名进行排序。输出排序前和排序后的学生信息表,验证排序结果。
6.使用直接选择排序方法,对学生信息中的数据结构成绩进行排序。输出排序前和排序后的学生信息表,验证排序结果。
7.使用冒泡排序方法,对学生信息中的程序设计成绩进行排序。输出排序前和排序后的学生信息表,验证排序结果。
8.编写一个菜单,来实现各项功能的选择。
*******************学生成绩管理系统*****************
* 1.信息初始化2.顺序查找*
* 3.二分查找4.直接插入排序*
* 5.冒泡排序6.直接选择排序*
实习五:查找与排序
实习五:查找与排序
实验内容:
1.按照要求建立相应的数组。
2.使用起泡排序法对该数组作非递减排序,并输出排序过程中各趟
的结果以及最终的结果。
3.对排好序的数组采用折半查找法查找关键字值等于给定值的数据
单元在数组中所处的位置(以下标表示),同时输出查找过程中各趟的指针low、high及mid的位置(以下标表示)。要求按不同的给定值做两次。
注意要对讲义中给出的折半查找算法作相应的改写。
实验要求:
要求建立的数组其值如下:{ 79,46,56,38,56,31,80 }。
折半查找时的给定值:第一次是79,第二次是50。
输入输出时应同时显示必要的说明。
当操作不合理或不能完成时,程序应能处理并输出相应信息。
附:
1.相关说明和数据结构
#include //需要的头文件
int V[7];
2. 主程序的参考算法
void main()
{
{ 对V[n]按要求进行初始化; }
BubbleSort (V, n); //起泡排序,并按要求输出各趟的结果
scanf(“%d”, kval ); //输入待查关键字值
Search_Bin (V, n, kval ); //要求输出各趟中各指针的位置
}
数据结构实验报告-实验5-排序
数据结构实验报告
实验名称:排序
学号:
姓名:
实验日期:2016.07.01
一、实验目的
至少掌握一种排序算法
二、实验内容
随机生成10个从1-100之间的随机数,编程实现至少一种排序算法,对该数据进行排序。
要求
1、要排序的数据随机生成
2、先升序排序一次,再用同样的算法降序排序一次
(2)分析
(3)实验代码
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
typedef struct
{
int key;
}keytype;
typedef struct
{ keytype r[1000];
int length;
}sqlist;
/*产生随机数*/
void creat(sqlist *l)
{
int i;
printf("请输入要产生的随机数个数:");
scanf("%d",&l->length);
srand((unsigned)time(NULL));
for(i=1;i<=l->length;i++)
{
l->r[i].key = rand() %900+100;
printf("%d ",l->r[i].key);
}
printf("\n");
}
/*交换顺序表中子表r[low...high]的记录,使枢轴记录到位,并返回其所在的位置*/
int partion(sqlist *l,int low,int high)
{ int pivotkey;
l->r[0]=l->r[low];
数据结构实验5查找排序算法
实验五、查找排序算法的实现
一、实验目的
1.掌握顺序、二分法查找方法及适用场合,并能在解决实际问题时灵活应用。
2.掌握各种排序(直接插入,希尔,冒泡,快速排序,简单选择,堆排序等)方法及适用场合,并能在解决实际问题时灵活应用。
二、实验内容
随机输入(或随机产生)30个数
(1)采用冒泡排序完成对这30个数的排序
(2)采用顺序、折半查找在(1)中排好序的数据中完成查找任务
(3)分别采用插入、快速和希尔完成对这30个数的排序任务,并输出每一趟排序后的结果
三、实验代码:
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
#define MaxSize 100
typedef struct
{
int key;
}RecordType;
//直接插入排序
void InsertSort(RecordType r[], int length)
{
for (int i=2; i<=length;i++)
{
r[0]=r[i];
int j=i-1;
while (r[0].key<r[j].key)
{
r[j+1]=r[j];
j=j-1;
}
r[j+1]=r[0];
}
}
//冒泡排序
void BubbleSort(RecordType r[], int length)
{
int t;
for (int i=1; i<=length; i++)
{
for (int j=1; j<=length-i; j++)
{
if (r[j].key>r[j+1].key)
《数据结构》实验报告——排序
《数据结构》实验报告排序实验题目:
输入十个数,从插入排序,快速排序,选择排序三类算法中各选一种编程实现。
实验所使用的数据结构内容及编程思路:
1.插入排序:直接插入排序的基本操作是,将一个记录到已排好序的有序表中,从而得到一个新的,记录增一得有序表。
一般情况下,第i趟直接插入排序的操作为:在含有i-1个记录的有序子序列r[1..i-1]中插入一个记录r[i]后,变成含有i个记录的有序子序列r[1..i];并且,和顺序查找类似,为了在查找插入位置的过程中避免数组下标出界,在r[0]处设置哨兵。在自i-1起往前搜索的过程中,可以同时后移记录。整个排序过程为进行n-1趟插入,即:先将序列中的第一个记录看成是一个有序的子序列,然后从第2个记录起逐个进行插入,直至整个序列变成按关键字非递减有序序列为止。
2.快速排序:基本思想是,通过一趟排序将待排记录分割成独立的两部分,其中一部分记录的关键字均比另一部分记录的关键字小,则可分别对这两部分记录继续进行排序,以达到整个序列有序。
假设待排序的序列为{L.r[s],L.r[s+1],…L.r[t]},首先任意选取一个记录(通常可选第一个记录L.r[s])作为枢轴(或支点)(pivot),然后按下述原则重新排列其余记录:将所有关键字较它小的记录都安置在它的位置之前,将所有关键字较大的记录都安置在它的位置之后。由此可以该“枢轴”记录最后所罗的位置i作为界线,将序列{L.r[s],…,L.r[t]}分割成两个子序列{L.r[i+1],L.[i+2],…,L.r[t]}。这个过程称为一趟快速排序,或一次划分。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验报告
课程名称数据结构实验名称查找与排序的实现
系别专业班级指导教师11
学号姓名实验日期实验成绩
一、实验目的
(1)掌握交换排序算法(冒泡排序)的基本思想;
(2)掌握交换排序算法(冒泡排序)的实现方法;
(3)掌握折半查找算法的基本思想;
(4)掌握折半查找算法的实现方法;
二、实验内容
1.对同一组数据分别进行冒泡排序,输出排序结果。要求:
1)设计三种输入数据序列:正序、反序、无序
2)修改程序:
a)将序列采用手工输入的方式输入
b)增加记录比较次数、移动次数的变量并输出其值,分析三种序列状态的算法时间复杂
性
2.对给定的有序查找集合,通过折半查找与给定值k相等的元素。
3.在冒泡算法中若设置一个变量lastExchangeIndex来标记每趟排序时经过交换的最后位置,
算法如何改进?
三、设计与编码
1.本实验用到的理论知识
2.算法设计
3.编码
package sort_search;
import java.util.Scanner;
public class Sort_Search {
//冒泡排序算法
public void BubbleSort(int r[]){
int temp;
int count=0,move=0;
boolean flag=true;
for(int i=1;i flag=false; count++; for(int j=0;j if(r[j]>r[j+1]){ temp=r[j]; r[j]=r[j+1]; r[j+1]=temp; move++; flag=true; } } } System.out.println("排序后的数组为:"); for(int i=0;i System.out.print(r[i]+" "); } System.out.println(); System.out.println("比较次数为:"+count); System.out.println("移动次数为:"+move); } public static int BinarySearch(int r[],int key){ //折半查找算法 int low=0,high=r.length-1; while(low<=high){ int mid=(low+high)/2; if(r[mid]==key){ return mid; } else if(r[mid]>key){ high=mid-1; } else{ low=mid+1; } } return -1; } //测试 public static void main(String[] args) { Sort_Search ss=new Sort_Search(); int t[]=new int[13]; System.out.println("依次输入13个整数为:"); Scanner sc=new Scanner(System.in); for(int i=0;i t[i]=sc.nextInt(); } System.out.println("排序前的数组为: "); for(int i=0;i System.out.print(t[i]+" "); } System.out.println(); ss.BubbleSort(t); //查找 while(true){ System.out.println("请输入要查找的数: "); int k=sc.nextInt(); if(BinarySearch(t,k)>0) System.out.println(k+" 在数组中的位置是第: "+ BinarySearch(t,k)); else System.out.println(k+" 在数组中查找不到!"); } } } 四、运行与调试 1.在调试程序的过程中遇到什么问题,是如何解决的? 问题:在计算比较次数和移动次数时,计算数据明显出错。 原因:在进行移动和比较的过程中,没有更新标志,导致计数出错。 解决办法:在比较和移动的过程中,有进行比较和移动的操作时,更新标志。然后按标志计数。 2.设计了哪些测试数据?预计结果是什么?说明: 测试了int类型数据: 241 17 23 45 37 4 31 43 11 89 33 101 177 预计排序后结果为:4 11 17 23 31 33 37 43 45 89 101 177 241 比较次数:①无序:8次②正序:1次③反序:12次 移动次数:①无序:30次②正序:0次③反序:78次 查找数33的位置为:5 查找数101的位置为:10 查找数100的结果为:查找不到 3.程序运行的结果如何 I.无序输入: