ex5_1:查找——基本题

假设有序序列的数据元素为:(3,10,13,17,40,43,50,70)
1)编写顺序查找函数
2)编写二分查找函数
3)在主程序中输入关键字(43和5),分别调用两种查找函数,输出结果。

ex5_2:Hash查找——扩展题

1)一个班有30位同学,安排装进一个有30个元素的数组,以姓名作为关键字进行哈希存储,具体方法如下:将姓名字符串中的每个字节按ASCII码(中文也支持 的哦)加起来,除以30,取得的余数作为元素存放位置(数组下标)。冲突解决采用线性探查法。
2)输入少于30个学生姓名,按Hash方式存入表中。
3)验证能够按Hash方式找到表中学生,不在表中将提示错误

ex5_3:排序——基本题

1)编写简单选择法函数
2)编写直接插入法函数
3)编写冒泡法排序函数
4)在主程序中输入一组数据元素,如513,87,512,61,908,170,897,275,653,462,分别调用三种排序函数,输出每趟排序结果。

ex5-4:排序——扩展题编写快速排序函数

#include<stdio.h>
#include<string.h>
#include<malloc.h>
typedef struct name{char a[30];
}name;
int commonfind(int a[],int n){int i=0,pos,flag=0; while(a[i]!=0){    if(a[i]==n){      pos=i+1;          flag=1;        }       i++;  }   if(flag==0)       return 0;   else    return pos; }
int devidefind(int a[],int n,int size){if(size==1){   if(a[0]==n)           return 1;       else        return 0;   }else if(devidefind(a,n,size/2)!=0)        return devidefind(a,n,size/2);      else if(devidefind(&a[size/2],n,size-size/2)!=0)       return size/2+devidefind(&a[size/2],n,size-size/2);
}
int Hash(char * cp){int i,n;    int sum = 0;   n = strlen(cp);    for( i = 0 ; i < n; i++){       sum += (int)*cp;            cp ++;    }   return sum%10;
}
void Hashstore(name student[],int pos,char s[]){while(student[pos].a[0]!='\0'){  pos=pos++;       pos=pos%10;    }   strcpy(student[pos].a,s);
}
int Hashfind(name student[],char s[]){int h,i=0;   h=Hash(s); while(!strcmp(student[h].a,s)){ h=(h+1)%10;       i++;      if(i>10)     return 0;   }   return h;
}
void simplesort(int a[],int size){int i;    int j;  int t;  for(i=1;i<size;i++)   for(j=i;j>0;j--){       if(a[j]<a[j-1])  {           t=a[j];            a[j]=a[j-1];       a[j-1]=t;              continue;           }           if(a[j>=a[j-1]])                break;      }
}
void selectsort(int a[],int size){int i,min=a[0],minpos=0;    int num=0; while(num<size){ min=a[num],minpos=num;        for(i=num;i<size;i++){        if(a[i]<min){            min=a[i];              minpos=i;      }       }       a[minpos]=a[num];      a[num]=min;        num++;                }
}
void gulugulu(int a[],int size){int i,j,t;  for(i=0;i<size-1;i++) for(j=0;j<size-1-i;j++)           if(a[j+1]<a[j]) {           t=a[j];                a[j]=a[j+1];a[j+1]=t;           }
}
void quicklysort(int a[],int size){int i;   int nmin=0,nmax=0;int *anew;  anew=(int*)malloc(size*sizeof(int));   if(size==1||size==0)    return;     for(i=0;i<size;i++){      if(a[i]<a[0]){           *(anew+nmin)=a[i];nmin++;           }           if(a[i]>=a[0]&&i!=0){          *(anew+size-1-nmax)=a[i];             nmax++;           }       }       *(anew+nmin)=a[0];        for(i=0;i<size;i++)       a[i]=*(anew+i);               quicklysort(&a[0],nmin);            quicklysort(&a[nmin+1],nmax);
}
void main(){
//111111111111111111111111111111111111111111111 name student[10];   char e[30]; int a[]={3,10,13,17,40,43,50,70,0};    int i;  int x;  printf("3,10,13,17,40,43,50,70,0\n"); scanf("%d",&x);   printf("直接搜索结果:%d\n",commonfind(a,x));    printf("二分查找搜索结果:%d\n",devidefind(a,x,8));
//22222222222222222222222222222222222222222222  printf("输入十个名字\n");   for(i=0;i<10;i++)     student[i].a[0]='\0';    for(i=0;i<10;i++){    scanf("%s",e);        Hashstore(student,Hash(e),e);}  for(i=0;i<10;i++) printf("%s ",student[i].a);   printf("\n"); printf("输入需查找的名字\n"); scanf("%s",e);    printf("%d\n",Hashfind(student,e));
//33333333333333333333333333333333333   int unsort1[100];   int unsort2[100];   int unsort3[100];   int unsort4[100];   int sizes=0;   int elem=1;    printf("输入n个整数,以0结束\n");   while(elem!=0){    scanf("%d",&elem);        if(elem!=0){       unsort1[sizes]=elem;           unsort2[sizes]=elem;           unsort3[sizes]=elem;           unsort4[sizes]=elem;           sizes++;      }   }   for(i=0;i<sizes;i++)      printf("%d ",unsort1[i]); printf("\n");     printf("插入排序结果:");simplesort(unsort1,sizes);   for(i=0;i<sizes;i++)  printf("%d ",unsort1[i]); printf("\n");
//44444444444444444444444444444444444444444444  printf("选择排序结果:"); selectsort(unsort2,sizes);  for(i=0;i<sizes;i++)  printf("%d ",unsort2[i]); printf("\n");
//55555555555555555555555555555555555555555555  printf("冒泡排序结果:"); gulugulu(unsort3,sizes);    for(i=0;i<sizes;i++)printf("%d ",unsort3[i]);   printf("\n");
//666666666666666666666666666666666666666666    printf("快速排序结果:");quicklysort(unsort4,sizes);  for(i=0;i<sizes;i++)  printf("%d ",unsort4[i]); printf("\n");}

ex5-4:归并排序——扩展题(选作)

归并排序由于为选做,无C语言版本,此处只有python版

def emerge(a,b):c=[]    m=0    n=0    if type(a)==int:   if a>b:       c=[b,a]        else:       c=[a,b]    else:   lmax=len(a)+len(b)        a.append(99999999)        b.append(99999999)        for i in range(0,lmax):      if a[m]<=b[n]:                c.append(a[m])                m=m+1            else:            c.append(b[n])       n=n+1    return c
def pandidi(a): if len(a)==1:    out=a[0]   else:    l=len(a)/2        l=int(l)        a1=a[0:l]        a2=a[l:-1]        a2.append(a[-1])        out=emerge(pandidi(a1),pandidi(a2))    return out
x=input('输入')
m=x.split(sep=' ')
m2=[]
for i in m:m2.append(eval(i))
k=pandidi(m2)
print(k)

数据结构——查找与排序相关推荐

  1. 数据结构——查找:折半查找、二叉查找(排序)树、平衡二叉树

    七大查找算法:https://www.cnblogs.com/zhang-qc/p/8745153.html 学习的地址 https://www.bilibili.com/video/av278314 ...

  2. 数据结构与算法--查找与排序另类用法-旋转数组中的最小数字

    查找与排序 查找 查找与排序都在程序设计中常被用到的算法.查找相对而言简单,一般都是顺序查找,二分查找,哈希表查找,和二叉排序树查找.其中二分查找是我必须熟悉的一种. 哈希表和二叉排序树主要点在于他的 ...

  3. C++数据结构||为我院设计一个简单的教师信息管理程序。对我院教师进行管理,包括插入、删除、查找、排序等功能。教师信息包括姓名、性别、出生年月、工作年月、学历、职务、住址、电话等信息。

    0.先序条件 在文件夹中新建名称"教师信息.txt"的文本文件存储教师信息 visual studio 2017 1.背景 数据结构课程设计的作业 为我院设计一个简单的教师信息管理 ...

  4. Python__数据结构与算法——查找与排序

    查找和排序是最基本的算法,在很多脚本中都会用到查找和排序.尽管 Python 提供的用于查找和排序的函数能够满足绝大多数需求,但还是有必要了解最基本的查找和排序算法,以便在有特殊需求的情况下,可以自己 ...

  5. 【数据结构基础应用】【查找和排序算法】

    代码参考<妙趣横生的算法.C语言实现> 文章目录 前言 1.顺序查找 2.折半查找 3.直接插入排序 4.选择排序 5.冒泡排序 6.希尔排序 7.快速排序 8.堆排序 9.排序算法性能比 ...

  6. 数据结构实验之查找与排序

    查找与排序 顺序查找 冒泡排序与折半查找 简单选择排序 直接插入排序 快速排序 顺序查找 一:顺序查找 顺序查找:从表的一端开始,依次将记录的关键字和给定值进行比较,若某个记录的关键字和给定值相等,则 ...

  7. 数据结构实验报告:查找和排序的应用

                                       学生信息管理系统 一.实验目的 1.本实验可以使学生更进一步巩固各种查找和排序的基本知识. 2.学会比较各种排序与查找算法的优劣. ...

  8. 实验四 查找和排序算法实现

    广州大学学生实验报告 开课实验室:计算机科学与工程实验(电子楼418A) 学院 计算机科学与网络工程学院 实验课程 数据结构实验 实验项目 实验四 查找和排序算法实现 一.实验目的: 1.各种排序算法 ...

  9. 关于单链表,二叉树,图,查找和排序的软件编程

    课程名称:计算机软件 使用软件:devcpp 注意:这里列出了关于单链表,二叉树,图,查找和排序的编程,全部程序由博主一人编写,会有瑕疵,谨慎使用. 1.单链表 要求:(1)建立单向链表,表长任意: ...

  10. 【数据结构(C语言)】数据结构-查找

    查找 文章目录 查找 一.基本概念 1.查找表 2.关键字 3.查找 二.查找算法的性能分析 1.平均查找长度(Average Search Length) 三.基于线性表的查找 1.存储结构的定义 ...

最新文章

  1. SQL Server中的高可用性----复制
  2. centos 7 ldap php7,centOS更新php7
  3. 在cds学到的(非技术)
  4. java alert跳页面_JavaScript中通过提示框跳转页面的方法
  5. java获取cpu使用率_再一次生产 CPU 高负载排查实践
  6. php限制下载文件格式,php下载文件源代码(强制任意文件格式下载)_PHP教程
  7. C51单片机————定时器计数器
  8. java.lang.IllegalStateException: You need to use a Theme.AppCompat theme (or descendant) with this a
  9. QT学习-核心类列表-4、Qt WebKit Widgets 5、Qt3DCore
  10. Android 升级JDK及配置问题。
  11. svn server修改服务器地址,【转载】visual svn server更换服务器地址
  12. 基础学习day06---面向对象二---static,类的初始化和调用顺序、单例模式
  13. 领域搜索算法 是什么 和遗传算法、模拟退火算法、禁忌搜索算法、模糊优化 算法、微粒群算法关系
  14. 黑马程序员_java基础笔记(09)...HTML基本知识、CSS、JavaScript、DOM
  15. python decimal模块_实例详解Python模块decimal
  16. toolchain安装教程支持_Ubuntu安装ARM架构GCC工具链(ubuntu install ARM toolchain)最简单办法...
  17. 计算机组装与维目实训内容,计算机组装与维实训报告书(原版).doc
  18. win10相机计算机无法使用,win10系统相机怎么用 win10系统相机无法使用怎么解决...
  19. android 颜色渐变扩散,Android 颜色渐变(gradient)的实现总结
  20. Warning from https://repo.packagist.org: Support for Composer 1 is deprecate

热门文章

  1. 游戏能给QQ一个未来吗?
  2. excel打不开html格式的文件,excel文件打不开提示格式无效怎么解决【图文】
  3. Bailian2967 特殊日历计算【日期计算】
  4. Pycharm修改镜像源并添加信任
  5. 手持式网络性能测试仪
  6. tolist方法python_python中如何使用tolist()方法将数组或者矩阵转换为列表?
  7. 2017中国产品经理大会总结-我又开始相信可以改变世界了
  8. 电脑无限重启 服务器,电脑开机无限蓝屏重启怎么办
  9. 阻抗分析仪(LCR表)与矢量网络分析仪
  10. Ansys SCDM基本操作