算法实验报告二分搜索算法

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

算法程序与设计预习实验报告

一、二分搜索算法:

代码:

#include

int BinarySearch(int a[], int x, int n){

int left = 0;

int right = x - 1;

while(left<= right){

int middle = (left + right)/2;

if(a[middle]

left = middle + 1;

else if(a[middle]>n)

right = middle - 1;

else

return middle;

}

return -1;

}

main(){

int i, serch, fanhui;

int a[10]={-24,-7,0,5,13,29,44,58,72,99};

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

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

printf("\n请输入要找的数:");

scanf("%d",&serch);

fanhui = BinarySearch(a,10,serch);

if(-1 == fanhui)

printf("查找失败\n");

else

printf ("查找成功\n");

}

运行结果:

二、合并排序:

代码:

#include

void Show(int c[], int n)

{

int i;

for ( i=0; i

printf("%d ", c[i]);

printf("\n");

}

void Merge(int d[], int l, int m, int r)

{

int e[10]={0};

for (int i=l,int j=m+1,int k=0;k<=r-l;k++)

{

if (i==m+1)

{

e[k]=d[j++];

continue;

}

if (j==r+1)

{

e[k]=d[i++];

continue;

}

if (d[i]

{

e[k]=d[i++];

}

else

{

e[k]=d[j++];

}

}

for (i=l,j=0;i<=r;i++,j++)

{

d[i]=e[j];

}

}

void MergeSort(int b[], int left, int right) {

if (left

{

int i;

i=(left+right)/2;

MergeSort(b,left, i);

MergeSort(b,i+1,right);

Merge(b,left,i,right);

}

}

{ int a[10] = { 58,0,-24,99,29,5,13,44,72,-7};

Show( a, 10);

MergeSort( a, 0, 10-1 );

Show( a, 10);

return 0;

}

运行结果:

三、快速排序:

代码:

#include

#include

int Partition(int b[], int p, int r){

int key;

key=b[p];

while(p

while(p= key )

r--;

if(p

b[p++]=b[r];

while(p

p++;

if(p

b[r--]=b[p];

}

return p;

}

void QuickSort(int a[], int p, int r){

if (p

int q= Partition(a,p,r);

QuickSort(a,p,q-1);

QuickSort(a,q+1,r);

}

return;

}

main(){

int i;

int a[10]={58,0,-24,99,29,5,13,44,72,-7};

printf("快排前\n");

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

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

QuickSort(a,0,9);

printf("\n 快排后\n");

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

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

printf ("\n");

}

运行结果:

相关文档
最新文档