C语言控制流语句
title: 2017-10-18控制流
tags: binsearch else-if, shellsort, insertsort
grammar_cjkRuby: true
前段时间忙着别的事情,不得不说政府部门办事真的很mj,自己的博客计划也就搁浅了,继续加油,不要被自己一点点的努力感动
else-if 折半查找binsearch
将待查找数据先和中间进行比较,如果待查找数据等于中间数据则直接返回,如果小于中间数则继续在前一半数据中进行判断,如果大于中间数则继续在后一半数据中进行判断。重复进行循环,直至搜索完数据。
/***********************/
//章节:第三章else-if
//内容:binsearch
/***********************/
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<sys/stat.h>
#include<time.h>
#define MAX_ELEMENT 10000
#define LOOP 200000
int binsearch(int x,int v[],int n);//x is the element to search for ,n the length
int binsearch2(int x,int v[],int n);
int main(void){
int testdate[MAX_ELEMENT];
int index; //index of element to search for
int n = 200; //element to search for
int i;
clock_t time_taken;//其实就是一个长整型,clock()返回程序运行的滴答数,要得到秒数则除以CLOCKS_PER_SEC
for(i = 0;i < MAX_ELEMENT; ++i){
testdate[i]=i;
//printf("%d\n", testdate[i]);
}
for(i = 0,time_taken = clock();i < LOOP;++i){
index = binsearch(n,testdate,MAX_ELEMENT);
}
time_taken = clock() - time_taken;
if(index < 0)
printf("Element %d is not found in \n",n);
else
printf("Element %d is found at the index %d\n", n,index);
printf("binsearch() took %lu clocks[%lu seconds]\n",time_taken,time_taken/CLOCKS_PER_SEC);
for(i = 0,time_taken = clock();i < LOOP;++i){
index = binsearch2(n,testdate,MAX_ELEMENT);
}
time_taken = clock() - time_taken;
if(index < 0)
printf("Element %d is not found in \n",n);
else
printf("Element %d is found at the index %d\n", n,index);
printf("binsearch2() took %lu clocks[%lu seconds]\n",time_taken,time_taken/CLOCKS_PER_SEC);
}
int binsearch(int x,int v[],int n){
int low,mid,high;
low = 0;
high = n-1;
while(low <= high){
mid = (low+high)/2;
if(x < v[mid])
high = mid - 1;
else if (x > v[mid])
low = mid + 1;
else
return mid;
}
return -1;
}
int binsearch2(int x,int v[],int n){
int low,mid,high;
low = 0;
high = n-1;
mid = (low+high)/2;
while(low <= high && x != v[mid]){
if(x < v[mid])
high = mid -1;
else
low = mid + 1;
mid = (low+high)/2;
}
if (x == v[mid])
return mid;
else
return -1;
}
插入排序
insertsort是最简单的排序方法,主要想法就是将一个新的数据插入已经排好顺序的序列中,从而获得一个长度加一的新序列。以下是一个简单的示意图。
希尔排序
希尔排序首先是将序列分为几组数据,然后依次对该组数据进行插入排序,然后不断组数不断减少,然后依次再对该组数据进行插入排序,我们把这个分组的个数叫增量,最后增量必须为1.
增量的取值规则为第一次取总长度的一半,第二次取一半的一半,直至增量为1
/***********************/
//章节:第三章控制流
//内容:shellsort,insertsort
/***********************/
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<sys/stat.h>
void insertsort(int a[],int n){
int i,j,tmp;
for(i = 1; i < n;i++){
tmp = a[i];
for(j = i-1;j >= 0&&a[j] > tmp;j--)
a[j+1] = a[j];
a[j+1] = tmp;
}
}
void shellsort(int a[],int n){
int i,j,gap,tmp;
for(gap = n/2 ; gap > 0 ; gap /= 2){
for(i = gap; i < n; i++){
tmp = a[i];
for(j = i - gap; j >= 0&&a[j] > tmp; j-=gap)
a[j+gap] = a[j];
a[j+gap] = tmp;
}
}
}
int main(void){
int a[]={1,2,5,10,4,9,1,8},b[]={1,2,5,10,4,9,1,8};
int n,i;
n = 8;
insertsort(a,n);
for(i=0;i<n;i++){
printf("%d\n",a[i]);
}
printf(">>>>>>>>>>>>\n");
shellsort(b,n);
for(i=0;i<n;i++){
printf("%d\n",b[i]);
}
}
各种控制流语句
if else / else if
while
for
do while
switch case
goto sw; sw:语句 //跳出多层循环语句
C语言控制流语句的更多相关文章
- 带你学够浪:Go语言基础系列 - 8分钟学控制流语句
★ 文章每周持续更新,原创不易,「三连」让更多人看到是对我最大的肯定.可以微信搜索公众号「 后端技术学堂 」第一时间阅读(一般比博客早更新一到两篇) " 对于一般的语言使用者来说 ,20% ...
- (Python )控制流语句if、for、while
这一节,我们将学习Python的控制流语句,主要包括if.for.while.break.continue 和pass语句 1. If语句 if语句也许是我们最熟悉的语句.其使用方法如下: x=inp ...
- OpenGL ES着色器语言之语句和结构体(官方文档第六章)内建变量(官方文档第七、八章)
OpenGL ES着色器语言之语句和结构体(官方文档第六章) OpenGL ES着色器语言的程序块基本构成如下: 语句和声明 函数定义 选择(if-else) 迭代(for, while, do-wh ...
- 归纳整理Python中的控制流语句的知识点
归纳整理Python中的控制流语句的知识点 Python 解释器在其最简单的级别,以类似的方式操作,即从程序的顶端开始,然后一行一行地顺序执行程序语句.例如,清单 1 展示了几个简单的语句.当把它们键 ...
- linux 几个控制流语句的格式例子(if语句)
linux 几个控制流语句的格式例子:if 语句例子:#!/bin/sh a=10b=20 if [ $a == $b ]then echo "a is equal to b"el ...
- java基础-控制流语句
浏览以下内容前,请点击并阅读 声明 一般情况下,代码的执行按照从上到下的顺序,然而通过加入一些判断,循环和跳转语句,你可以有条件地执行特定的语句. 接下来分三部分介绍Java的控制流语句,他们是判断语 ...
- [SQL]SQL语言入门级教材_SQL语言基本语句介绍(四)
SQL语言基本语句介绍 • 表的建立 关系数据库的主要特点之一就是用表的方式组织数据.表是SQL语言存放数据.查找数据以及更新数据的基本数据结构.在SQL语言中,表有严格的定义,它是一种二维表,对于这 ...
- 【Python】控制流语句、函数、模块、数据结构
1.三种控制流语句:if\for\while 2.每句后都要加冒号 3.有elif语句=else后加一个if 注意使用变量名! 注意缩进! 注意控制流语句后面要加冒号! 4.for i in rang ...
- T-SQL 控制流语句
批处理: 一个批处理段是由一个或者多个语句组成的一个批处理,之所以叫批处理是因为所有语句一次性被提交到一个SQL实例. 批处理是分批提交到SQL Server示例,因此在不同的批处理里局部变量不可访问 ...
随机推荐
- ZOJ2334 Monkey King 并查集 STL
题意:两家原始人(猴)打交道后成为一家猴,打交道时两家分别派出最帅的两位猴子,颜值各自减半,问每次打交道后新家族最帅的猴子的颜值.当然,已经是一家子就没有必要打交道了,因为没有猴希望颜值降低,毕竟还得 ...
- Java面向对象 Main函数 静态的应用 单例设计模式
Java面向对象 Main函数 静态的应用与单例设计模式 知识概要 (1)Main函数的细解 (2)静态的应用,静态变量,静态代码块,静态函数 (3)单例设计模式 1.M ...
- 当谈到 GitLab CI 的时候,我们都该聊些什么(下篇)
上篇主要介绍了 GitLab WorkFlow 以及 CI/CD 做的事情,并且详细分析 GitLab CI 跟 Runner 信息交互是如何进行的.接下来将为大家讲解 Executor 的实现,再通 ...
- win10 uwp 切换主题
本文主要说如何在UWP切换主题,并且如何制作主题. 一般我们的应用都要有多种颜色,一种是正常的白天颜色,一种是晚上的黑夜颜色,还需要一种辅助的高对比颜色.这是微软建议的,一般应用都要包含的颜色. 我们 ...
- LINUX下分区命令Parted详解
通常划分分区工具我们用的比较多是fdisk命令,但是现在由于磁盘越来越廉价,而且磁盘空间越来越大.而fdisk工具他对分区是有大小限制的,它只能划分小于2T的磁盘.现在的磁盘空间已经远远大于2T,有两 ...
- 【转】IO流程
原文地址:http://blog.chinaunix.net/uid-26922071-id-3954900.html IO之流程与buffer概览 为了说明这个流程,还是用图来描述一下比较直观. ...
- 脱壳第一讲,手工脱壳ASPack2.12的壳.ESP定律
脱壳第一讲,手工脱壳ASPack2.12的壳.ESP定律 一丶什么是ESP定律 首先我们要明白什么是壳.壳的作用就是加密PE的. 而ESP定律就是壳在加密之前,肯定会保存所有寄存器环境,而出来的时候, ...
- LINUX 笔记-文件隐藏属性
chmod u+s xxx 设置setuid(4775) chmod g+s xxx 设置gid(2775) chmod o+t xxx 设置stick bit,针对目录(1775)
- Git相关操作二
1.查看HEAD提交: git show HEAD 在git中,目前提交被称为HEAD提交,输入上述命令可以查看当前提交所有文件的修改内容. 2.撤销更改: git checkout HEAD fil ...
- js中的undefined 和null
undefined是基本数据类型 表示未定义 缺少的意思 null是引用数据类型 是对象 表示空对象 undefined是从null派生出来的 所以undefined==null true Ja ...

