冒泡法排序函数如下:
void bubble(int a[],int n)
{int i,j,t;
for(i=0;in-1;i++)/*共进行n-1轮*/
for(j=0;jn-1-i;j++)/*每轮在前n-i个数中比较*/
if(a[j]a[j+1]) /*若相邻元素逆序*/
{t=a[j]; a[j]=a[j+1];a[j+1]=t;}/*就交换*/
}
void sort(int *a, int left, int right)
{
if(left = right)/*如果左边索引大于或者等于右边的索引就代表已经整理完成一个组了*/
return ;
int i = left;
int j = right;
int key = a[left];
while(i j) /*控制在当组内寻找一遍*/
while(i j key = a[j])
/*而寻找结束的条件就是,1,找到一个小于或者大于key的数(大于或小于取决于你想升
j--;/*向前寻找*/
a[i] = a[j];
/*找到一个这样的数后就把它赋给前面的被拿走的i的值(如果第一次循环且key是
a[left],那么就是给key)*/
while(i j key = a[i])
/*这是i在当组内向前寻找,同上,不过注意与key的大小关系停止循环和上面相反,
因为排序思想是把数往两边扔,所以左右两边的数大小与key的关系相反*/
i++;
a[j] = a[i];
a[i] = key;/*当在当组内找完一遍以后就把中间数key回归*/
sort(a, left, i - 1);/*最后用同样的方式对分出来的左边的小组进行同上的做法*/
sort(a, i + 1, right);/*用同样的方式对分出来的右边的小组进行同上的做法*/
/*当然最后可能会出现很多分左右,直到每一组的i = j 为止*/
可以调用 系统函数
可以使用 快排 qort 函数 (头文件stdlib,h里面),
只需要自己编写 比较函数
可以百度一下用法 , 很详细的!
当然可以自己写 排序函数 快排 堆排序 .... 冒泡 和选择的 效率就很低了
C语言中要编写sin函数,实质上要利用sin的泰勒公式,然后根据泰勒公式,将其中的每一项进行分解,最后用循环,累加计算出最终结果
下面用for循环实现sin的算法,程序代码如下:
#includestdio.h
#includemath.h
void main()
int i;
float x,sum,a,b; //sum代表和,a为分子,b为分母
char s;
printf("please input x");
scanf("%f",x);
s=1;
sum=0;
a=x; //分母赋初值
b=1; //分子赋初值
sum=sum+s*a/b; //累加一项
a=a*x*x; //求下一项分子
s*=-1;
printf("sum=%f\n",sum);
①.、C语言有现场的常用数学函数,所在函数库为math.h、stdlib.h.
函数名及解释:
int abs(int i) 返回整型参数i的绝对值
double cabs(struct complex znum) 返回复数znum的绝对值
double fabs(double x) 返回双精度参数x的绝对值
long labs(long n) 返回长整型参数n的绝对值
double exp(double x) 返回指数函数ex的值
double log(double x) 返回logex的值
double log10(double x) 返回log10x的值
double pow(double x,double y) 返回xy的值
double pow10(int p) 返回10p的值
double sqrt(double x) 返回+√x的值
double acos(double x) 返回x的反余弦cos-1(x)值,x为弧度
double asin(double x) 返回x的反正弦sin-1(x)值,x为弧度
double atan(double x) 返回x的反正切tan-1(x)值,x为弧度
double cos(double x) 返回x的余弦cos(x)值,x为弧度
double sin(double x) 返回x的正弦sin(x)值,x为弧度
double tan(double x) 返回x的正切tan(x)值,x为弧度
double cosh(double x) 返回x的双曲余弦cosh(x)值,x为弧度
double sinh(double x) 返回x的双曲正弦sinh(x)值,x为弧度
double tanh(double x) 返回x的双曲正切tanh(x)值,x为弧度
例如:
double?T,V;
return?V;
#include stdio.h
#include conio.h
#include stdlib.h
struct LRUQueue //定义一个特殊的队列
int number;
int data[MAINMEM];
}lru;
void Init(); //初始化操作
void Add(int pageID); //加入队列
int Find(int pageID); //查找页面是否在主存中
void Update(int pos); //更新页所在的地址
void PrintQueue(); //输出主存内容
int main()
int i;
int queuelength;
int queue[QUEUEMAXLEN];
Init(); //初始化操作
printf("请输入队列的长度:");
scanf("%d",queuelength);
printf("请以此输入队列的页号:");
for(i=0;iqueuelength;i++)
scanf("%d",queue[i]);
Add(queue[i]);
PrintQueue();
system("pause");
return 0;
void Init()
lru.number = 0;
for(i = 0;iMAINMEM;i++)
lru.data[i] = -1;
int Find(int pageID)
for (i=0;iMAINMEM;i++)
if(lru.data[i] == pageID)
return i;
void Update(int pos)
int tmp = lru.data[pos];
for(i = pos;ilru.number;++i)
lru.data[i] = lru.data[i+1];
lru.data[lru.number-1] = tmp; //将被访问的页放在最后一位,其他的页前移,因为置换时删掉的是主存中第一块放置的页面
void PrintQueue()
printf("当前内存中的页号:\n");
putch('|');
if(lru.data[i] == -1)
printf(" |");
else
printf("%d |",lru.data[i]);
putch('\n');
void Add(int pageID)
printf("当前访问的页面:%d\n",pageID);
if(lru.numberMAINMEM) //如果主存没有填满
int pos = Find(pageID);
if(pos)
Update(pos);
lru.data[lru.number++]=pageID;
for(i=0;iMAINMEM-1;i++)
lru.data[i]=lru.data[i+1]; //数据左移一个单位
lru.data[i]=pageID; //加入新数据
只有字符数组有库函数strcmp函数,格式如下:
int
strcmp(const
char
*str1,
const
如果左边小于右边的字符串,函数返回-1
如果左边字符串等于右边字符串,函数返回0
如果左边字符串大于右边字符串,函数返回1
一般基本数据类型的比较都可以用关系运算符,如果自定义的可以重载运算符或者使用函数对象,如果用C语言的方式,自定义一个比较函数就OK了,库函数中没有这种普适类型的比较函数
以上就是土嘎嘎小编为大家整理的c语言的算法用什么函数相关主题介绍,如果您觉得小编更新的文章只要能对粉丝们有用,就是我们最大的鼓励和动力,不要忘记讲本站分享给您身边的朋友哦!!