数据结构实验五-查找与排序的实现

合集下载

数据结构查找排序实验报告

数据结构查找排序实验报告

贵州大学实验报告

学院:电子信息学院专业:通信工程班级: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];

数据结构查找与排序PPT课件

数据结构查找与排序PPT课件

位置
0 1 2 3 4 5 6 7 8 9 10
关键字
33 60
27 4 15 38 71
49
冲突次数
04
501 1 6
3
查找时比较次数 1 5
612 2 7
4
查找成功的平均查找长度=(1+5+6+1+2+2+7+4)/8=28/8=3.5
第4页/共29页
3、已知关键码集合{53,17,19,61,98,75,79,63,46,49}要求散列到地址区间(100, 101, 102, 103, 104, 105, 106,107,108,109)内,若发生冲突则用开地址法的线索探测法解决,要求写 出的选用的散列函数,形成的散列表:计算查找成功的平均搜索长度。(设等概率情况) 答:选用的散列函数为:H(K)=100 + K%10
• 由于进行了递归调用,需要一定数量的栈O(log2n)作为辅助空间
第18页/共29页
例如 1、快速排序算法在 数据元素按关键字有序的 情况下最不利于发挥其长处。 2、设关键字序列为:49,38,66,80,70,15,22,欲对该序列进行从小到大排序。 采用待排序列的第一个关键字作为枢轴,写出快速排序法的一趟和二趟排序之 后的状态
第1页/共29页
5、设有序顺序表中的元素依次为017,094,154, 170, 275, 503, 509, 512, 553, 612, 677, 765, 897, 908.试画出对其进行折半搜索时的判定树,并计算搜索成功的 平均搜索长度。

数据结构课程设计——排序与查找

数据结构课程设计——排序与查找

北京信息科技大学

课程设计报告

课程名称数据结构课程设计

题目排序与查找

指导教师赵庆聪

设计起止日期

设计地点

系别信息管理学院

专业__信息管理与信息系统_

姓名/学号______鲁丹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;

数据结构实验报告五,查找与排序-

数据结构实验报告五,查找与排序-

数据结构实验报告五,查找与排序-

查找与排序

一、实验目的:

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; //缩小查找区间为右子表}

数据结构 查找 实验报告

数据结构 查找 实验报告

数据结构查找实验报告

数据结构查找实验报告

1. 简介

查找是计算机科学中一种常见的操作,它用于在一组数据中快

速定位特定的元素。数据结构是计算机存储、组织数据的方式,可

以有效地支持查找操作。本实验报告将介绍查找算法的原理和实现,以及实验结果的分析和总结。

2. 查找算法

2.1 顺序查找

顺序查找是一种简单直观的查找算法,它从数据集的第一个元

素开始逐个比较,直至找到目标元素或遍历完所有元素。顺序查找

的时间复杂度为O(n),其中n是数据集的大小。

2.2 二分查找

二分查找是一种高效的查找算法,它要求数据集必须是有序的。它通过将数据集分成两部分,并与目标元素进行比较,以确定目标

元素所在的区间,然后在该区间内继续二分查找,直至找到目标元

素或确定目标元素不存在。二分查找的时间复杂度为O(log n),其

中n是数据集的大小。

2.3 插值查找

插值查找是对二分查找的一种改进,它根据目标元素的估计位

置来确定比较的起始位置。它适用于数据集分布均匀的情况,可以

进一步减少查找的次数。插值查找的时间复杂度为O(log(log n))。

3. 实验结果

本次实验我们使用了三种查找算法(顺序查找、二分查找和插

值查找)在不同大小的数据集上进行了性能测试。实验结果如下表

所示:

---- 数据集大小 ---- 顺序查找时间(ms) ---- 二分查找时

间(ms) ---- 插值查找时间(ms) ----

-------------------------------------------------------

-------------------------------

数据结构实验5报告-经典排序算法的实现

数据结构实验5报告-经典排序算法的实现

实验报告

课程名称:数据结构与算法

课程类型:必修

实验项目:排序算法实验

实验题目:经典排序算法的实现

一、实验目的

1.了解几种基本排序算法的思想

2.实现几种基本的排序算法

3.分析比较各种排序算法的时间复杂度

4.更好深入理解各种排序算法

二、实验要求及实验环境

实验要求:

实现以下四组排序算法中的任意三组:

冒泡排序和快速排序;

选择排序和堆排序。

插入排序和希尔排序;

(二路)归并排序, 基数排序

产生不同规模和分布的数据,以“图或表”的方式给出输入规模和

分布对排序方法运行时间变化趋势的影响(画出T(n)的曲线)。并

与理论分析结果比较。

将上述“图或表”采用图片等形式贴在实验报告中,与作适当分析或说明。

实验环境:codeblocks/Dev-C++

三、设计思想(本程序中的用到的所有数据抽象数据性ADT的定义,主程序的流程图及各程序模块之间的调用关系)

1. 所用的抽象数据性ADT的定义

1)逻辑结构:

最大堆:是一种特殊形式的线性表,根节点的值总是大于叶节点的值。

堆的操作:

按照最大堆整理堆:void pushdown(int first, int last);

结构体数组:一个具有很多结构体元素的数组。

结构体数组的操作:

产生待排序数组a:void createtest(records a[]);

找到数组a基准元素下标:int findpivot(int i, int j);

对数组a的元素a[i]......a[j]进行快速排序:void quicksort(int i, int j);

打印排序数组:void print();

查找与排序实验

查找与排序实验

查找、排序实验

班级B09521 学号20094052127 姓名王海亮

一、实验目的

1 掌握不同的查找和排序方法,并能用高级语言实现相应算法。

2 熟练掌握顺序查找和二分查找方法。

3 熟练掌握直接插入排序、选择排序、冒泡排序、快速排序。

二、实验内容

1 创建给定的静态查找表。表中共包含十条学生信息,信息如下:

学号姓名班级C++ 数据结构

1 王立03511 85 76

2 张秋03511 78 88

3 刘丽03511 90 79

4 王通03511 7

5 86

5 赵阳03511 60 71

6 李艳03511 58 68

7 钱娜03511 95 89

8 孙胜03511 45 60

2 使用顺序查找方法,从查找表中查找姓名为赵阳和王夏的学生。如果查找成功,则显示该生的相关信息;如果查找不成功,则给出相应的提示信息。

3使用快速排序方法,对学生信息中的学号进行排序,然后使用二分查找方法,从查找表中查找学号为7和12的学生。如果查找成功,则显示该生的相关信息;如果查找不成功,则给出相应的提示信息。

4 使用直接插入排序方法,对学生信息中的姓名进行排序。输出排序前和排序后的学生信息表,验证排序结果。

5 使用选择排序方法,对学生信息中的C成绩进行排序。输出排序前和排序后的学生信息表,验证排序结果。

6 使用冒泡排序方法,对学生信息中的数据结构成绩进行排序。输出排序前和排序后的学生信息表,验证排序结果。

7 编写一个主函数,将上面函数连在一起,构成一个完整程序。

8 调试实验源程序并运行。

三、实验结果

程序的源代码如下:

数据结构实验报告——查找与排序

数据结构实验报告——查找与排序

哈尔滨工业大学(深圳)

数据结构实验报告

查找与排序

学院: 计算机科学与技术

一、问题分析

此题是一道排序问题,排序的方法有很多种,此题我用的是堆排序,这是一种不稳定排序,但时间复杂度较低,比较快。计算机首先需要把文件中的数据读入内存中,用动态数组存储数据,然后建立数据结构,然后建立堆,比较子节点和父节点大小,降序排列,之后互换头结点与尾节点,再递归重复即可。查找的话,依次查找对比即可。

二、详细设计

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.对排好序的数组采用折半查找法查找关键字值等于给定值的数据

单元在数组中所处的位置(以下标表示),同时输出查找过程中各趟的指针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-排序

数据结构实验报告-实验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];

数据结构排序的实验报告

数据结构排序的实验报告

数据结构排序的实验报告

数据结构排序的实验报告

一、引言

数据结构是计算机科学中的重要概念,它用于组织和存储数据,以便于有效地

进行操作和处理。排序算法是数据结构中的一个重要应用,它可以将无序的数

据按照一定的规则进行排列,提高数据的查找、插入和删除效率。本实验旨在

比较不同排序算法的性能表现,并分析其优缺点。

二、实验方法

本实验选取了常见的四种排序算法:冒泡排序、插入排序、选择排序和快速排序。实验使用Python语言实现,并通过随机生成的整数数组进行测试。实验环境为一台配置良好的计算机。

三、实验步骤

1. 冒泡排序:从数组的第一个元素开始,与相邻元素比较并交换位置,重复此

过程直到数组完全有序。实验记录交换次数和比较次数。

2. 插入排序:将数组分为有序和无序两部分,每次从无序部分选择一个元素插

入到有序部分的正确位置。实验记录比较次数和移动次数。

3. 选择排序:从数组中选择最小的元素,与数组的第一个元素交换位置,然后

从剩余的无序部分选择最小元素与第二个元素交换位置,以此类推。实验记录

交换次数和比较次数。

4. 快速排序:选择一个基准元素,将数组分为两部分,左边部分的元素小于等

于基准元素,右边部分的元素大于基准元素,然后分别对两部分进行递归排序。实验记录比较次数。

四、实验结果

经过多次实验,记录并统计了每种排序算法的性能表现。结果显示,快速排序在大规模数据集上表现最优,其次是插入排序,冒泡排序和选择排序性能相对较差。

五、实验分析

1. 冒泡排序的时间复杂度为O(n^2),在大规模数据集上表现较差。其交换次数和比较次数均较高,导致性能不佳。

数据结构实验5查找排序算法

数据结构实验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. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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.无序输入:

相关文档
最新文档