C冒泡递归折半等算法
来源:互联网 发布:李敖 胡因梦 知乎 编辑:程序博客网 时间:2024/06/01 10:13
#include <stdio.h>#include <stdlib.h>#include <time.h>#define LENGTH 20void init_groupdata(int *p,int n){int i;srand(time(NULL));//设置随机种子for (i = 1; i <= n; i++){*p=rand()%100;//得到100以内的随机数p++;}}void show_groupdata(const int *p,int n){int i;for (i = 1; i <= n; i++){printf("%d\t",*p);p++;}putchar('\n');}//交换两个数void swap(int *const data,int *const des){int tmp;tmp=*data;*data=*des;*des=tmp;}/**冒泡升序和降序**//**循环比较相邻的两个数字,比如5个数,需要比较 4+3+2+1=10次 **/void bubble_asc(int *p,int n){int i,j,*tmp=p;for (i = 1; i <= n; i++){for (j = 1; j <= n-i; j++){if (*tmp>*(tmp+1)){swap(tmp,tmp+1);}tmp++;}tmp=p;}}void bubble_desc(int *p,int n){int i,j,*tmp=p;for (i = 1; i <= n; i++){for (j = 1; j <= n-i; j++){if (*tmp<*(tmp+1)){swap(tmp,tmp+1);}tmp++;}tmp=p;}}/**冒泡升序和降序**//**穷举法查找**/int find_exhaustivity(const int *p,int n,int finddata){int i;for (i = 1; i <= n; i++){if (*p==finddata){return i;}p++;}return 0;}/**穷举法查找**//**二叉树查找**/int find_tree_recursive(const int *p,int start,int end,int finddata){int mid,data;if (start>end){return 0;}mid=(start+end)/2;//获得折半中间的那个数data=*(p+mid);printf("折半后的数是:%d\n",data);if (*(p+mid)>finddata)end=mid-1;else if (*(p+mid)<finddata)start=mid+1;elsereturn mid+1;return find_tree_recursive(p,start,end,finddata);}int find_tree_cycle(const int *p,int start,int end,int finddata){int mid,data;while (start<=end){mid=(start+end)/2;//获得折半中间的那个数data=*(p+mid);printf("折半后的数是:%d\n",data);if (*(p+mid)>finddata)end=mid-1;else if (*(p+mid)<finddata)start=mid+1;elsereturn mid+1;}return 0;}/**二叉树查找**/int main(void){/* 测试冒泡的升序和降序int data[LENGTH];init_groupdata(data,LENGTH);show_groupdata(data,LENGTH);bubble_asc(data,LENGTH);show_groupdata(data,LENGTH);bubble_desc(data,LENGTH);show_groupdata(data,LENGTH);*/int data[LENGTH],finddata,result;init_groupdata(data,LENGTH);printf("原始数据%d个:\n",LENGTH);show_groupdata(data,LENGTH);printf("请输入你需要查找的数:");scanf("%d",&finddata);/* 穷举法查找测试result=find_exhaustivity(data,LENGTH,finddata);*//*折半查找测试*/printf("升序后的数据:\n");bubble_asc(data,LENGTH);show_groupdata(data,LENGTH);result=find_tree_cycle(data,0,LENGTH-1,finddata);result?printf("你需要查找的数 %d 在这组数据中的第 %d个\n",finddata,result):printf("没有找到需要查找的数\n");system("pause");return 0;}
0 0
- C冒泡递归折半等算法
- C语言---算法(选择排序/冒泡排序/折半查找/进制查表法)
- 折半查找(递归算法)
- 递归的折半查找算法
- 折半查找的递归算法
- 递归的折半查找算法
- 折半查找的递归算法
- 折半查找的递归算法
- 冒泡/递归算法
- JAVA冒泡排序和折半查找算法
- C 【冒泡 选择排序 & 折半查找】
- java算法:折半查找(递归算法和非递归算法)
- 数据结构与算法(C语言版)__递归的折半查找
- 递归算法--->阶乘,Fibonacci数列,折半查找
- 有序表折半查找的递归算法
- 验证算法(递归的折半查找)
- java 折半查找 非递归算法 递归算法
- 算法 - 折半查找(C#)
- RabbitMQ消息队列的小伙伴: ProtoBuf(Google Protocol Buffer)(转)
- [LeetCode] Valid Number
- 整合greyBox和asp.net2.0,实现lightBox效果
- IOS中获取各个文件的目录路径的方法和NSFileManager类(整理)
- Unsupported major.minor version (jdk版本错误)解决方案 办法
- C冒泡递归折半等算法
- Manifest intent-filter
- Proguard returned with error code 1. See console
- Using ipset for security group(iptables too long from N*N -> N?)
- BZOJ系列3907《网格》题解
- 获取Android应用程序出错信息并将信息发送到指定邮件
- 调用系统相机相册
- OpenGL中的Alpha测试,深度测试,模板测试,裁减测试
- lua 安装 packet