模板Word文件下载.docx

上传人:b****2 文档编号:5767957 上传时间:2023-05-05 格式:DOCX 页数:21 大小:18.53KB
下载 相关 举报
模板Word文件下载.docx_第1页
第1页 / 共21页
模板Word文件下载.docx_第2页
第2页 / 共21页
模板Word文件下载.docx_第3页
第3页 / 共21页
模板Word文件下载.docx_第4页
第4页 / 共21页
模板Word文件下载.docx_第5页
第5页 / 共21页
模板Word文件下载.docx_第6页
第6页 / 共21页
模板Word文件下载.docx_第7页
第7页 / 共21页
模板Word文件下载.docx_第8页
第8页 / 共21页
模板Word文件下载.docx_第9页
第9页 / 共21页
模板Word文件下载.docx_第10页
第10页 / 共21页
模板Word文件下载.docx_第11页
第11页 / 共21页
模板Word文件下载.docx_第12页
第12页 / 共21页
模板Word文件下载.docx_第13页
第13页 / 共21页
模板Word文件下载.docx_第14页
第14页 / 共21页
模板Word文件下载.docx_第15页
第15页 / 共21页
模板Word文件下载.docx_第16页
第16页 / 共21页
模板Word文件下载.docx_第17页
第17页 / 共21页
模板Word文件下载.docx_第18页
第18页 / 共21页
模板Word文件下载.docx_第19页
第19页 / 共21页
模板Word文件下载.docx_第20页
第20页 / 共21页
亲,该文档总共21页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

模板Word文件下载.docx

《模板Word文件下载.docx》由会员分享,可在线阅读,更多相关《模板Word文件下载.docx(21页珍藏版)》请在冰点文库上搜索。

模板Word文件下载.docx

0:

if(last==2)next=z[s[0]]<

z[width+s[1]]?

1;

/*topringof'

to'

pegmustbelargerandaneven'

distance'

away*/if((z[next*width+s[next]])>

(z[last*width+s[last]])||((z[last*width+s[last]]-z[next*width+s[next]])%2==0))

last=3-next-last;

from%dto%d\n"

next+1,last+1);

s[next]=s[next]-1;

s[last]=s[last]+1;

/*movefrom'

next'

to'

last'

peg*/

z[last*width+s[last]]=z[next*width+s[next]+1];

}

冒泡法改进

/*冒泡法是数据排序的一种基本算法,它的基本方法是:

相邻两元素进行比较,如有需要则进行交换,

每完成一次循环就将最小元素排在最后(如从大到小排序),下一次循环是将其他的数进行类似操作?

如将N个数按从大到小排序,TurboC语言程序函数

如下:

*/

voidsort(inta[],intn);

main()

inta[100],i,j,n;

/*输入数组元素的个数及各元素的值*/

scanf("%d",&

n);

for(i=0;

i<

n;

i++)scanf("%d",&

a[i]);

sort(a,n);

i++)printf("%d",a[i]);

sort(inta[],intn)

{

inti,j,t;

for(i=n-2;

i>

=0;

i--)

for(j=0;

j<

i;

j++)

if(a[j]<

a[j+1])

t=a[j];

a[j]=a[j+1];

a[j+1]=t;

}

/*N个元素需比较N*(N-1)/2次,效率较差?

其实,可根据每一次循环比较中的情

况改进之?

[改进一]:

若某次循环中没有数据交换过,则可认为数据已经有序了,

不必再进行循环了,可在程序中设一变量Flag用来标识有无数据交换?

sort(inta[],intn)

{

inti,j,t,flag;

for(i=n-2;

0;

flag=0;

for(j=0;

if(a[j]<

a[j+1])

{

t=a[j];

a[j]=a[j+1];

a[j+1]=t;

flag=1;

}

if(flag==0)break;

/*[改进二]:

如果在一次循环中,最后的某些元素没有交换过,则说明后面这些元

素的顺序已排序,下次循环可不对其进行比较?

本方法主要考虑要排序的数组元素的范

围,而不是每一轮排序都将数组元素的范围减少1?

*/

sort(inta[],intn)

inti,j,t,k,flag;

flag=n-1;

while(flag>

0)

k=0;

j++)

if(a[j]<

{

t=a[j];

a[j]=a[j+1];

a[j+1]=t;

k=j;

}

flag=k;

/*此处不填flag=flag-1;

各种排序

#include<

stdlib.h>

structnode

intkey;

}r[20];

structrnode

intpoint;

};

voidprint(structnodea[20],intn);

intcreat();

voidshell(structnodea[20],intn);

inthoare(structnodea[20],intl,inth);

voidquick1(structnodea[20],intn);

voidquick2(structnodea[20],intl,inth);

voidheap(structnodea[20],inti,intm);

voidheapsort(structnodea[20],intn);

voidmerges(structnodea[20],structnodea2[20],inth1,intmid,inth2);

voidmergepass(structnodea[20],structnodea2[20],intl,intn);

voidmergesort(structnodea[20],intn);

intyx(intm,inti);

intradixsort(structrnodea[20],intn);

intnum,l,h,c;

structrnodes[20];

c=1;

while(c!

=0)

printf("

主菜单\n"

1输入关键字,以-9999表示结束。

\n"

2希尔排序\n"

3非递归的快速排序\n"

4递归的快速排序\n"

5堆排序\n"

6归并排序\n"

7基数排序\n"

输入选择(1--7,0表示结束):

scanf("

c);

switch(c)

case1:

num=creat();

print(r,num);

break;

case2:

shell(r,num);

case3:

quick1(r,num);

case4:

l=0;

h=num-1;

quick2(r,l,h);

printf("

outputquick2sortresult:

print(r,num);

case5:

heapsort(r,num);

case6:

mergesort(r,num);

case7:

radixsort(s,num);

}

}//mainend

voidprint(structnodea[20],intn)

inti;

for(i=0;

i<

n;

i++)

%5d"

a[i].key);

}//printend

intcreat()

inti,n;

n=0;

inputkeys"

i);

while(i!

=-9999)

r[n].key=i;

n++;

return(n);

}//creatend

voidshell(structnodea[20],intn)//希尔排序

inti,j,k;

for(i=n;

i>

=1;

i--)

a[i].key=a[i-1].key;

k=n/2;

while(k>

=1)

for(i=k+1;

=n;

a[0].key=a[i].key;

j=i-k;

while((a[j].key>

a[0].key)&

&

(j>

=0))

a[j+k].key=a[j].key;

j=j-k;

}

a[j+k]=a[0];

k=k/2;

a[i].key=a[i+1].key;

输出希尔排序的结果:

}//shellend

////////////////////快速排序///////////////////////////

inthoare(structnodea[20],intl,inth)//分区处理函数

inti,j;

structnodex;

i=l;

j=h;

x.key=a[i].key;

do

while((i<

j)&

(a[j].key>

=x.key))

j--;

if(i<

j)

a[i].key=a[j].key;

i++;

(a[i].key<

a[j].key=a[i].key;

}while(i<

j);

a[i].key=x.key;

return(i);

}//hoareend

voidquick1(structnodea[20],intn)

inti,l,h,tag,top;

ints[20][2];

l=0;

h=n-1;

tag=1;

top=0;

while(l<

h)

i=hoare(a,l,h);

top++;

s[top][0]=i+1;

s[top][1]=h;

h=h-1;

if(top==0)

tag=0;

else

l=s[top][0];

h=s[top][1];

top--;

}while(tag==1);

输出非递归快速排序结果:

}//quickend

voidquick2(structnodea[20],intl,inth)//递归的快速排序

if(l<

i=hoare(a,l,h);

quick2(a,l,i-1);

quick2(a,i+1,h);

}//quick2end

////////////////////快速排序结束////////////////////////

////////////////////堆排序函数//////////////////////////

voidheap(structnodea[20],inti,intm)//调整堆的函数

intj;

j=2*i;

while(j<

=m)

if(j<

m)

if(a[j].key>

a[j+1].key)

j++;

if(a[j].key<

x.key)

i=j;

j=2*i;

j=m+1;

}//heapend

voidheapsort(structnodea[20],intn)//堆排序的主体函数

inti,v;

for(i=n/2;

heap(a,i,n);

输出堆排序结果:

for(v=n;

v>

=2;

v--)

a[1].key);

x.key=a[1].key;

a[1].key=a[v].key;

a[v].key=x.key;

heap(a,1,v-1);

}//heapsortend

/////////////////堆排序函数结束///////////////////

//////////////////归并函数////////////////////////

voidmerges(structnodea[20],structnodea2[20],inth1,intmid,inth2)

//归并排序的核心算法

i=h1;

j=mid+1;

k=h1-1;

while((i<

=mid)&

(j<

=h2))

k=k+1;

if(a[i].key<

=a[j].key)

a2[k].key=a[i].key;

a2[k].key=a[j].key;

j++;

while(i<

=mid)

k++;

a2[k].key=a[i].key;

i++;

=h2)

a2[k].key=a[j].key;

}//mergesend

voidmergepass(structnodea[20],structnodea2[20],intl,intn)

//一趟归并

intj,i,h1,mid,h2;

i=0;

while((n-i)>

=2*l)

h1=i;

mid=h1+l-1;

h2=i+2*l-1;

merges(a,a2,h1,mid,h2);

i=i+2*l;

if((n-i)<

=l)

for(j=i;

j<

j++)

a2[j].key=a[j].key;

h2=n-1;

}//mergepassend

voidmergesort(structnodea[20],intn)

intl;

structnodea2[20];

l=1;

while(l<

n)

mergepass(a,a2,l,n);

l=2*l;

mergepass(a2,a,l,n);

输出归并排序的结果:

}//mergesortend

///////////////归并函数结束///////////////

///////////////基数排序///////////////////

intyx(intm,inti)//分离关键字倒数第i位有效数字的算法

intx;

switch(i)

case1:

x=m%10;

case2:

x=(m%100)/10;

case3:

x=(m%1000)/100;

case4:

x=(m%10000)/1000;

return(x);

}//yxend

intradixsort(structrnodea[20],intn)

intf[11],e[11],i,j,k,l,p,d,t;

for(i=1;

a[i].key=r[i-1].key;

a[i].point=i+1;

a[n].point=0;

p=1;

输出关键字有效位数d\n"

d);

输出基数排序的结果:

=d;

for(j=0;

=10;

f[j]=0;

e[j]=0;

while(p!

k=yx(a[p].key,i);

if(f[k]==0)

f[k]=p;

e[k]=p;

else

l=e[k];

a[l].point=p;

p=a[p].point;

j=0;

while(f[j]==0)

p=f[j];

t=e[j];

while(j<

10)

while((j<

10)&

(f[j]==0))

if(f[j]!

a[t].point=f[j];

t=e[j];

a[t].point=0;

t=p;

while(t!

a[t].key);

t=a[t].point;

return(p);

多位阶乘

intdata[40];

intdigit;

inti,j,r,k;

intn;

=40;

i++)/*将数组初始值设为0*/

data[i]=0;

data[0]=1;

data[1]=1;

digit=1;

Enteranumberwhatyouwanttocalculus:

for(j=1;

=digit;

j++)/*每位上等乘上阶数digit决定有几位*/

data[j]*=i;

if(data[j]>

for(r=1;

r<

r++)

if(data[digit]>

digit++;

data[r+1]+=data[r]/10;

data[r]=data[r]%10;

%d!

="

i);

for(k=digit;

k>

k--)

data[k]);

getch();

/*最大公约数,最小公倍数*/

inthcf(inta,intb)

intr=0;

while(b!

r=a%b;

a=b;

b=r;

return(a);

}

lcd(intu,intv,inth)

return(u*v/h);

intu,v,h,l;

%d%d"

u,&

v);

h=hcf(u,v);

H.C.F=%d\n"

h);

l=lcd(u,v,h);

L.C.D=%d\n"

l);

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工程科技 > 能源化工

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2