冒泡法排序函數(shù)如下:
公司主營(yíng)業(yè)務(wù):成都網(wǎng)站設(shè)計(jì)、網(wǎng)站建設(shè)、移動(dòng)網(wǎng)站開(kāi)發(fā)等業(yè)務(wù)。幫助企業(yè)客戶真正實(shí)現(xiàn)互聯(lián)網(wǎng)宣傳,提高企業(yè)的競(jìng)爭(zhēng)能力。成都創(chuàng)新互聯(lián)是一支青春激揚(yáng)、勤奮敬業(yè)、活力青春激揚(yáng)、勤奮敬業(yè)、活力澎湃、和諧高效的團(tuán)隊(duì)。公司秉承以“開(kāi)放、自由、嚴(yán)謹(jǐn)、自律”為核心的企業(yè)文化,感謝他們對(duì)我們的高要求,感謝他們從不同領(lǐng)域給我們帶來(lái)的挑戰(zhàn),讓我們激情的團(tuán)隊(duì)有機(jī)會(huì)用頭腦與智慧不斷的給客戶帶來(lái)驚喜。成都創(chuàng)新互聯(lián)推出倉(cāng)山免費(fèi)做網(wǎng)站回饋大家。
void bubble(int a[],int n)
{int i,j,t;
for(i=0;in-1;i++)/*共進(jìn)行n-1輪*/
for(j=0;jn-1-i;j++)/*每輪在前n-i個(gè)數(shù)中比較*/
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)/*如果左邊索引大于或者等于右邊的索引就代表已經(jīng)整理完成一個(gè)組了*/
{
return ;
}
int i = left;
int j = right;
int key = a[left];
while(i j) /*控制在當(dāng)組內(nèi)尋找一遍*/
{
while(i j key = a[j])
/*而尋找結(jié)束的條件就是,1,找到一個(gè)小于或者大于key的數(shù)(大于或小于取決于你想升
序還是降序)2,沒(méi)有符合條件1的,并且i與j的大小沒(méi)有反轉(zhuǎn)*/
{
j--;/*向前尋找*/
}
a[i] = a[j];
/*找到一個(gè)這樣的數(shù)后就把它賦給前面的被拿走的i的值(如果第一次循環(huán)且key是
a[left],那么就是給key)*/
while(i j key = a[i])
/*這是i在當(dāng)組內(nèi)向前尋找,同上,不過(guò)注意與key的大小關(guān)系停止循環(huán)和上面相反,
因?yàn)榕判蛩枷胧前褦?shù)往兩邊扔,所以左右兩邊的數(shù)大小與key的關(guān)系相反*/
{
i++;
}
a[j] = a[i];
}
a[i] = key;/*當(dāng)在當(dāng)組內(nèi)找完一遍以后就把中間數(shù)key回歸*/
sort(a, left, i - 1);/*最后用同樣的方式對(duì)分出來(lái)的左邊的小組進(jìn)行同上的做法*/
sort(a, i + 1, right);/*用同樣的方式對(duì)分出來(lái)的右邊的小組進(jìn)行同上的做法*/
/*當(dāng)然最后可能會(huì)出現(xiàn)很多分左右,直到每一組的i = j 為止*/
}
可以調(diào)用 系統(tǒng)函數(shù)
可以使用 快排 qort 函數(shù) (頭文件stdlib,h里面),
只需要自己編寫(xiě) 比較函數(shù)
int cmp(const void *p1, const void *p2)
{
}
可以百度一下用法 , 很詳細(xì)的!
當(dāng)然可以自己寫(xiě) 排序函數(shù) 快排 堆排序 。。。。 冒泡 和選擇的 效率就很低了
C語(yǔ)言中要編寫(xiě)sin函數(shù),實(shí)質(zhì)上要利用sin的泰勒公式,然后根據(jù)泰勒公式,將其中的每一項(xiàng)進(jìn)行分解,最后用循環(huán),累加計(jì)算出最終結(jié)果
下面用for循環(huán)實(shí)現(xiàn)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; //分子賦初值
for(i=1;a/b=1e-6;i++)
{
sum=sum+s*a/b; //累加一項(xiàng)
a=a*x*x; //求下一項(xiàng)分子
b=b*2*i*(2*i+1); //求下一項(xiàng)分母
s*=-1;
}
printf("sum=%f\n",sum);
}
3. 關(guān)于上述程序的幾點(diǎn)說(shuō)明:上述程序的計(jì)算結(jié)果精確到小數(shù)點(diǎn)后六位;上述程序運(yùn)用了sin的泰勒展開(kāi)式 sin
x=x-x^3/3!+x^5/5! ...... ,程序中將sin泰勒公式中的每一項(xiàng)拆成了分子,分母以及每一項(xiàng)前的符號(hào)這三項(xiàng),以便于每一項(xiàng)的累加
1、C語(yǔ)言有現(xiàn)場(chǎng)的常用數(shù)學(xué)函數(shù),所在函數(shù)庫(kù)為math.h、stdlib.h。
函數(shù)名及解釋?zhuān)?/p>
int abs(int i) 返回整型參數(shù)i的絕對(duì)值
double cabs(struct complex znum) 返回復(fù)數(shù)znum的絕對(duì)值
double fabs(double x) 返回雙精度參數(shù)x的絕對(duì)值
long labs(long n) 返回長(zhǎng)整型參數(shù)n的絕對(duì)值
double exp(double x) 返回指數(shù)函數(shù)ex的值
double frexp(double value,int *eptr) 返回value=x*2n中x的值,n存貯在eptr中
double ldexp(double value,int exp); 返回value*2exp的值
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 atan2(double y,double x) 返回y/x的反正切tan-1(x)值,y的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 hypot(double x,double y) 返回直角三角形斜邊的長(zhǎng)度(z),x和y為直角邊的長(zhǎng)度,z2=x2+y2
2、復(fù)雜的數(shù)學(xué)函數(shù)可以用自定義函數(shù)的形式實(shí)現(xiàn)。
例如:
double?ConerVelocity(int?A,?double?x1,?double?y1,?double?x2,?double?y2,?double?t1,?double?t2)
{
double?T,V;
T=acos(abs(x1?*?x2?+?y1?*?y2)/?sqrt(x1?*?x1?+y1?*?y1)/sqrt(x2?*?x2?+y2?*?y2));
V=?(A?*?(t2-t1))/(2*sin(T/2));
return?V;
}
#include stdio.h
#include conio.h
#include stdlib.h
#define MAINMEM 3 //主存可存儲(chǔ)的頁(yè)面?zhèn)€數(shù)
#define QUEUEMAXLEN 30 //隊(duì)列最大長(zhǎng)度
struct LRUQueue //定義一個(gè)特殊的隊(duì)列
{
int number;
int data[MAINMEM];
}lru;
void Init(); //初始化操作
void Add(int pageID); //加入隊(duì)列
int Find(int pageID); //查找頁(yè)面是否在主存中
void Update(int pos); //更新頁(yè)所在的地址
void PrintQueue(); //輸出主存內(nèi)容
int main()
{
int i;
int queuelength;
int queue[QUEUEMAXLEN];
Init(); //初始化操作
printf("請(qǐng)輸入隊(duì)列的長(zhǎng)度:");
scanf("%d",queuelength);
printf("請(qǐng)以此輸入隊(duì)列的頁(yè)號(hào):");
for(i=0;iqueuelength;i++)
{
scanf("%d",queue[i]);
Add(queue[i]);
PrintQueue();
}
system("pause");
return 0;
}
void Init()
{
lru.number = 0;
int i;
for(i = 0;iMAINMEM;i++)
{
lru.data[i] = -1;
}
}
int Find(int pageID)
{
int i;
for (i=0;iMAINMEM;i++)
{
if(lru.data[i] == pageID)
{
return i;
}
}
return 0;
}
void Update(int pos)
{
int tmp = lru.data[pos];
int i;
for(i = pos;ilru.number;++i)
{
lru.data[i] = lru.data[i+1];
}
lru.data[lru.number-1] = tmp; //將被訪問(wèn)的頁(yè)放在最后一位,其他的頁(yè)前移,因?yàn)橹脫Q時(shí)刪掉的是主存中第一塊放置的頁(yè)面
}
void PrintQueue()
{
printf("當(dāng)前內(nèi)存中的頁(yè)號(hào):\n");
int i;
putch('|');
for(i = 0;iMAINMEM;i++)
{
if(lru.data[i] == -1)
printf(" |");
else
printf("%d |",lru.data[i]);
}
putch('\n');
}
void Add(int pageID)
{
printf("當(dāng)前訪問(wèn)的頁(yè)面:%d\n",pageID);
if(lru.numberMAINMEM) //如果主存沒(méi)有填滿
{
int pos = Find(pageID);
if(pos)
{
Update(pos);
}
else
{
lru.data[lru.number++]=pageID;
}
}
else
{
int pos = Find(pageID);
if(pos)
{
Update(pos);
}
else
{
int i;
for(i=0;iMAINMEM-1;i++)
{
lru.data[i]=lru.data[i+1]; //數(shù)據(jù)左移一個(gè)單位
}
lru.data[i]=pageID; //加入新數(shù)據(jù)
}
}
}
只有字符數(shù)組有庫(kù)函數(shù)strcmp函數(shù),格式如下:
int
strcmp(const
char
*str1,
const
char
*str2);
如果左邊小于右邊的字符串,函數(shù)返回-1
如果左邊字符串等于右邊字符串,函數(shù)返回0
如果左邊字符串大于右邊字符串,函數(shù)返回1
一般基本數(shù)據(jù)類(lèi)型的比較都可以用關(guān)系運(yùn)算符,如果自定義的可以重載運(yùn)算符或者使用函數(shù)對(duì)象,如果用C語(yǔ)言的方式,自定義一個(gè)比較函數(shù)就OK了,庫(kù)函數(shù)中沒(méi)有這種普適類(lèi)型的比較函數(shù)