实验四 查找和各种排序的算法

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

实验四查找和各种排序的算法

一、实验目的

1、通过该实验,掌握顺序查找和折半算法;

2、掌握排序的基本概念及操作过程;

3、熟悉各种内部排序的基本原理和操作方法。

二、实验内容

1、对两种查找算法的基本操作。

2、插入排序、冒泡排序、选择排序、快速排序

三、问题描述

1、插入排序的基本思想是顺序地把待排序列中的各个元素按其排序码的大小,插入到已排序的序列的适当位置上;选择排序的基本思想是不断从待排序的心理中选取排序码最小的数据元素放到已排序的元素序列的后面,直到序列中所有记录都已排序为止;冒泡排序是每次对相邻的两个元素的排序码进行比较,当不符合次序即交换位置,这样顺序码值大的就(或小的)像冒气泡一样逐渐升起,直到所有相邻两元素的次序合理为止。快速排序是在冒泡法排序基础上发展起来的一种排序算法,它每一步都将待排序列中第一个元素放到最终位置上,并同时将待排序列中其他元素分成两个子序列,一个子序列中元素的顺序码均小于第一个元素的排序没码,另一个子序列中元素的顺序码均不小于第一个元素的排序码。如此循环处理,直到每个子序列只剩下一个元素,即完成了排序。

四、程序清单

1、顺序查找:

#include

#define MAX_SIZE 100

typedef struct{

int key;

}element;

element list[MAX_SIZE];

int seqsearch(element list[],int searchnum,int num);

int main()

int i,num,searchnum,k;

printf("请输入元素的个数:"); scanf("%d",&num);

printf("请输入元素:\n");

for(i=0;i

{

scanf("%d",&list[i].key);

}

while(1)

{

printf("请输入要查询的数据元素:"); scanf("%d",&searchnum);

k=seqsearch(list,searchnum,num); if(k!=-1)

{

printf("所查询元素的下标为:"); printf("%d\n",k);

}

else

printf("查询元素不存在。\n");

return 0;

}

int seqsearch(element list[],int searchnum,int num) {

int j;

list[num].key=searchnum;

for(j=0;list[j].key!=searchnum;j++)

;

return j

}

2、折半查找:

#include

#define MAX_SIZE 100

#define COMPARE(a,b) (a)>(b)?1:(a)==(b)?0:-1 typedef struct{

int key;

}element;

element list[MAX_SIZE];

int binsearch(element list[],int searchnum,int num);

int main()

{

int i,num,searchnum,k;

printf("请输入元素的个数:");

scanf("%d",&num);

printf("请输入元素:\n");

for(i=0;i

{

scanf("%d",&list[i].key);

}

while(1)

{

printf("请输入要查询的数据元素:");

scanf("%d",&searchnum);

k=binsearch(list,searchnum,num);

if(k!=-1)

{

printf("所查询元素的下标为:");

printf("%d\n",k);

}

else

printf("查询元素不存在。\n");

}

return 0;

}

int binsearch(element list[],int searchnum,int num) {

int left=0,right=num-1,middle;

while(left<=right)

{

middle=(left+right)/2;

switch(COMPARE(list[middle].key,searchnum)) {

case 1:right=middle-1;break;

case 0:return middle;

case -1:left=middle+1;

}

}

return -1;

}

3、各种排序

#include "stdio.h"

#include "stdlib.h"

#include "math.h"

#include "dos.h"

#define Max 100

typedef int sqlist[Max+1];

void insertsort(sqlist a,int n)

{

int i,j;

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

{

if( a[i]

{

a[0]=a[i];

for(j=i-1;a[0]

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

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

相关文档
最新文档