数据结构——查找与排序
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)
数据结构——查找与排序相关推荐
- 数据结构——查找:折半查找、二叉查找(排序)树、平衡二叉树
七大查找算法:https://www.cnblogs.com/zhang-qc/p/8745153.html 学习的地址 https://www.bilibili.com/video/av278314 ...
- 数据结构与算法--查找与排序另类用法-旋转数组中的最小数字
查找与排序 查找 查找与排序都在程序设计中常被用到的算法.查找相对而言简单,一般都是顺序查找,二分查找,哈希表查找,和二叉排序树查找.其中二分查找是我必须熟悉的一种. 哈希表和二叉排序树主要点在于他的 ...
- C++数据结构||为我院设计一个简单的教师信息管理程序。对我院教师进行管理,包括插入、删除、查找、排序等功能。教师信息包括姓名、性别、出生年月、工作年月、学历、职务、住址、电话等信息。
0.先序条件 在文件夹中新建名称"教师信息.txt"的文本文件存储教师信息 visual studio 2017 1.背景 数据结构课程设计的作业 为我院设计一个简单的教师信息管理 ...
- Python__数据结构与算法——查找与排序
查找和排序是最基本的算法,在很多脚本中都会用到查找和排序.尽管 Python 提供的用于查找和排序的函数能够满足绝大多数需求,但还是有必要了解最基本的查找和排序算法,以便在有特殊需求的情况下,可以自己 ...
- 【数据结构基础应用】【查找和排序算法】
代码参考<妙趣横生的算法.C语言实现> 文章目录 前言 1.顺序查找 2.折半查找 3.直接插入排序 4.选择排序 5.冒泡排序 6.希尔排序 7.快速排序 8.堆排序 9.排序算法性能比 ...
- 数据结构实验之查找与排序
查找与排序 顺序查找 冒泡排序与折半查找 简单选择排序 直接插入排序 快速排序 顺序查找 一:顺序查找 顺序查找:从表的一端开始,依次将记录的关键字和给定值进行比较,若某个记录的关键字和给定值相等,则 ...
- 数据结构实验报告:查找和排序的应用
学生信息管理系统 一.实验目的 1.本实验可以使学生更进一步巩固各种查找和排序的基本知识. 2.学会比较各种排序与查找算法的优劣. ...
- 实验四 查找和排序算法实现
广州大学学生实验报告 开课实验室:计算机科学与工程实验(电子楼418A) 学院 计算机科学与网络工程学院 实验课程 数据结构实验 实验项目 实验四 查找和排序算法实现 一.实验目的: 1.各种排序算法 ...
- 关于单链表,二叉树,图,查找和排序的软件编程
课程名称:计算机软件 使用软件:devcpp 注意:这里列出了关于单链表,二叉树,图,查找和排序的编程,全部程序由博主一人编写,会有瑕疵,谨慎使用. 1.单链表 要求:(1)建立单向链表,表长任意: ...
- 【数据结构(C语言)】数据结构-查找
查找 文章目录 查找 一.基本概念 1.查找表 2.关键字 3.查找 二.查找算法的性能分析 1.平均查找长度(Average Search Length) 三.基于线性表的查找 1.存储结构的定义 ...
最新文章
- SQL Server中的高可用性----复制
- centos 7 ldap php7,centOS更新php7
- 在cds学到的(非技术)
- java alert跳页面_JavaScript中通过提示框跳转页面的方法
- java获取cpu使用率_再一次生产 CPU 高负载排查实践
- php限制下载文件格式,php下载文件源代码(强制任意文件格式下载)_PHP教程
- C51单片机————定时器计数器
- java.lang.IllegalStateException: You need to use a Theme.AppCompat theme (or descendant) with this a
- QT学习-核心类列表-4、Qt WebKit Widgets 5、Qt3DCore
- Android 升级JDK及配置问题。
- svn server修改服务器地址,【转载】visual svn server更换服务器地址
- 基础学习day06---面向对象二---static,类的初始化和调用顺序、单例模式
- 领域搜索算法 是什么 和遗传算法、模拟退火算法、禁忌搜索算法、模糊优化 算法、微粒群算法关系
- 黑马程序员_java基础笔记(09)...HTML基本知识、CSS、JavaScript、DOM
- python decimal模块_实例详解Python模块decimal
- toolchain安装教程支持_Ubuntu安装ARM架构GCC工具链(ubuntu install ARM toolchain)最简单办法...
- 计算机组装与维目实训内容,计算机组装与维实训报告书(原版).doc
- win10相机计算机无法使用,win10系统相机怎么用 win10系统相机无法使用怎么解决...
- android 颜色渐变扩散,Android 颜色渐变(gradient)的实现总结
- Warning from https://repo.packagist.org: Support for Composer 1 is deprecate