排序与查找

相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

排序与查找

1.实验目的

掌握在数组上进行排序和查找的方法和算法

理解方法特点,并能灵活运用

加深对排序和查找方法的理解,逐步培养解决实际问题的编程能力

题1

编写程序,使用冒泡排序法对给定数组进行排序。(数组可自定,例如a[]={210,108,65,49,72,88,67,5,19,36,

90,35,1,112,215,6,23,46,51,29,77,19,0,55,27,48,18,22,30,56})

实验流程图如下:

题2

使用折半查找法对给定的有序数组进行查找。数组可自行定义。

题一的实验结果如下

分析:

冒泡排序既是将数据一个一个比较,将大的不断往后放,知道所有数据都进行了比较,循环结束。

题二实验结果如下:

分析:

折半查找需要数据有序,本实验在递增的情况下进行的,所以对数据需要输入递增序列,然后将数据与最中间的进行比较,如果大,则在后一半进行查找,然后继续依次比较,直至查找到对应数据,如果没有,则显示没有。

附代码:

题1

编写程序,使用冒泡排序法对给定数组进行排序。(数组可自定,例如a[]={210,108,65,49,72,88,67,5,19,36,

90,35,1,112,215,6,23,46,51,29,77,19,0,55,27,48,18,22,30,56})

题2

使用折半查找法对给定的有序数组进行查找。数组可自行定义。

#include

void main()

{

int i, n=30, j, m;

int a[]={210,108,65,49,72,88,67,5,19,36,

90,35,1,112,215,6,23,46,51,29,

77,19,0,55,27,48,18,22,30,56};

printf("\nThese integers are as below:\n\n");

for (i=0; i

{

printf("%6d",a[i]);

if ((i+1)%10==0)

printf("\n");

}

for (i=1; i

{

for (j=0; j

{

if (a[j]>a[j+1])

{

m=a[j];

a[j]=a[j+1];

a[j+1]=m;

}

}

}

printf("\nThe sorted integers:\n\n");

for (i=0; i

{

printf("%6d",a[i]);

if ((i+1)%10==0)

printf("\n");

}

}

#include

#define N 51

void main(void)

{

int a[N];

int i,n,num;

int top,bottom,mid;

int flag=1; //如果在表列中找到数字,则值为1,否则为0

int loc=-1;//要查找的数在表列中的位置,如果loca=-1表示表列中没有这个数;如果有这个数,则它的值为所在的位置

printf("你想在多少个数中进行折半查找,请输入(1--50):"); scanf("%d",&n);

while(n<1 || n>50)

{

printf("你输入的数不正确,请重新输入。\n");

printf("你想在多少个数中进行折半查找,请输入(1--50):"); scanf("%d",&n);

}

printf("请你输入一个整数a[1](需保证递增有序):");

scanf("%d",&a[1]);

i=2;

while(i<=n) //输入从小到大的表列

{

printf("请你输入一个整数a[%d](需保证递增有序):",i);

scanf("%d",&a[i]);

if(a[i] > a[i-1])

i++;

else

printf("你输入的数不满足要求,请重新输入。\n");

}

//输出表列

printf("\n输出表列\n");

for(i=1; i<=n; i++)

{

printf("%6d",a[i]);

}

printf("请你输入要查找的数:");

scanf("%d",&num);

flag=1; //假设输入的数在表列中

top=n;

bottom=1;

mid=(top+bottom)/2;

while(flag)

{

//printf("top=%d, bottom=%d, mid=%d, a[%d]=%d\n",top,bottom,mid,mid,a[mid]);

if( (num>a[top]) || (numa[top] 或者num

{

loc=-1;

flag=0;

}

else if(a[mid]==num) //如果num 等于找到的数

{

loc=mid;

printf("找到数%6d 的位置%2d\n",num,loc);

break;

}

else if(a[mid]>num) //若a[mid]>num,则num 一定在a[bottom]和a[mid-1]范围之内

{

相关文档
最新文档