折半查找冒泡排序堆排序

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

数据与结构实验报告

折半查找法、冒泡法与堆排序一实验设计:

(1)用折半查找法找到需要查找目标的位置

(2)用冒泡法把输入数据从小到大排列

(3)用堆排序法把输入的数据从小到大排列

二算法设计:

1.冒泡排序与折半查找的共同应用

#include

#include

void maopao(int a[])/*冒泡排序*/

{

int k,i,j,t;

for(i=0;i<10;i++)

{

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

if(a[i]==0)

break;

}

k=i;

for(i=0;i

{

for(j=i;j

{

if(a[i]>a[j])

{

t=a[i];

a[i]=a[j];

a[j]=t;

}

}

}

for(i=0;i

{

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

}

}

int chazhao(int a[],int _value,int n)

{ // 二分法(也称折半查找法)

int index=0; // 当前数组的首元素下标

int current=n-1; // 数组当前的大小

int k; // 当前数组中间的数的下标

while (index<=current)

{

// 开始二分法查找

k=(index+current)/2; // 除以2代表得到当前数组中间的数的下标

if(a[k]==_value)

return k+1; // 返回要查找的值_value所在的下标

// 否则比较要查找的值_value是在折半后的前半部分还是后半部分

if(a[k]<_value)// 说明要查找的值在折半后的后半部分

index=k+1; // 令index指向后半部分数组的首元素

else // 说明要查找的值在折半后的前半部分

current=k-1; // 令current等于前半部分数组的长度}

return -1; // 返回-1代表没有查找到该值(_value)

}

void main()

{

int a[10],c;

maopao(a);

scanf("%d",&c);

printf("%d",chazhao(a,c,10));

}

2.堆查找的单独应用

#include

#include

#include

void BigHeapAdjust(int *p, int r, int len);

void BigHeapSort(int *p, int len);

int main()

{

int array[1000] = {0};

int n;

printf("请输入排序元素的个数:\n");

scanf("%d", &n);

printf("请输入要排序的元素:\n");

for(int i=0; i

scanf("%d", array+i);

BigHeapSort(array, n);

printf("结果是:\n");

for(int k=0; k

printf("%d ", array[k]);

getchar();

getchar();

getchar();

return 0;

}

void BigHeapAdjust(int *p, int r, int len) {

int tmp = p[r];

int j;

for(j=2*r+1; j<=len-1; j=2*j+1)

{

if(j=p[j])

++j;

if(tmp >= p[j])

break;

p[r] = p[j];

r = j;

}

p[r] = tmp;

}

void BigHeapSort(int *p, int len)

{

int i,j;

for(i=len/2-1; i>=0; --i)

BigHeapAdjust(p, i, len);

p[0] ^= p[len-1];

p[len-1] ^= p[0];

p[0] ^= p[len-1];

for(j=len-1; j>1; --j)

{

BigHeapAdjust(p, 0, j);

p[0] ^= p[j-1];

p[j-1] ^= p[0];

p[0] ^= p[j-1];

}

}

三实验结果

冒泡排序与折半查找

输入10个数(78 90 30 29 10 74 2 6 5 7)先冒泡排序从小到大排列输入查找7这个数据

显示在从小到大的数组中排第4位

相关文档
最新文档