📄 c语 .htm
字号:
h[++top]=m;<BR> h[++top]=n;<BR>
return(top);<BR> }</P>
<P>int pop(h,top,m,n)<BR>int h[], top,*m,*n;<BR> {
*m=h[top--];<BR> *n=h[top--];<BR>
return(top);<BR> }</P>
<P>int quick(r,i,j)<BR>struct record r[];<BR>int i,j;<BR> {<BR>
rec=r[i];<BR> while(i<j)<BR> {
while((i<j)&&(r[j].key>rec.key))<BR> j--;<BR> b[4]++;<BR>
if(i<j)<BR> r[i++]=r[j];<BR> a[4]++;<BR>
while((i<j)&&(r[i].key<=rec.key))<BR> i++;<BR> b[4]++;<BR>
if(i<j)<BR> r[j--]=r[i];<BR> a[4]++;<BR>
}<BR> r[i]=rec;<BR>
a[4]++;<BR> return(i);<BR> }<BR>void
Quick_sort(r,l,h) /* 快 速 排
序 */<BR>struct record r[];<BR>int l,h;<BR> { int
ss[s];<BR> int top,i,j,k;<BR>
for(i=1;i<=s;i++)<BR>
printf("%4d",r[i].key);<BR>
printf("\n");<BR> i=l;<BR>
j=h;<BR> top=-1;<BR>
do<BR> { while(i<j)<BR> {
k=quick(r,i,j);<BR>
if(j-k>1)<BR>
top=push(ss,top,k+1,j);<BR>
j=k-1;<BR> }<BR>
if(top>0)<BR>
top=pop(ss,top,&j,&i);<BR>
}<BR> while((top>=0)||(i<j));<BR>
printf("**************************快 速 排
序*************************\n");<BR>
for(i=1;i<=s;i++)<BR>
printf("%4d",r[i].key);<BR>
printf("\n");<BR> printf("move: %d
time, compete: %d time",a[4],b[4]);<BR> }</P>
<P>void Simple_select_sort(r,n) /* 简 单 选 择 排
序 */<BR>struct record r[];<BR>int n;<BR>
{<BR> int i,j,m;<BR>
a[5]=0;b[5]=0;<BR>
for(i=1;i<=n;i++)<BR>
printf("%4d",r[i].key);<BR>
printf("\n");<BR>
for(i=1;i<=n-1;i++)<BR> {
m=i;<BR> for(j=i+1;j<=n;j++)<BR>
if(r[j].key<r[m].key)<BR> m=j;<BR>
b[5]++;<BR> if(i!=m)<BR>
{ rec=r[i];<BR> r[i]=r[m];<BR>
r[m]=rec;<BR>
a[5]=a[5]+3;<BR> }<BR>
}<BR> printf("************************简 单 选
择************************\n");<BR>
for(i=1;i<=s;i++)<BR>
printf("%4d",r[i].key);<BR>
printf("\n");<BR> printf("move:%d
time, compete:%d
time",a[5],b[5]);<BR>
printf("\n");<BR> }</P>
<P>void p(r,n) /*
次数排列 */<BR>int r[];<BR>int n;<BR> { int
rec;<BR> int i,j;<BR>
for(i=1;i<=n;i++)<BR> {
rec=r[i];<BR> j=i-1;<BR> while((j>0) &&
(rec<r[j]))<BR> {
r[j+1]=r[j];<BR>
j=j-1;<BR> }<BR> r[j+1]=rec;}<BR>
if(r==a)<BR> printf("关 键 字 移 动 次 数 排 列:\n");<BR>
else<BR> printf("关 键 字 比 较 次 数 排
列:\n");<BR>
for(i=1;i<=n;i++)<BR>
printf("%8d",r[i]);<BR>
printf("\n");<BR>}</P>
<P><BR>void
heap(r,l,m)
/* 堆的子函数 */<BR>struct record r[];<BR>int l,m;<BR> {
int i,j;<BR> i=l;<BR> j=2*i;<BR>
rec=r[i];<BR> while(j<=m)<BR> {
if((j<m)&&(r[j].key>r[j+1].key))<BR> j++;<BR> b[6]++;<BR>
if(rec.key>r[j].key)<BR> {
b[6]++;<BR> r[i]=r[j];<BR> i=j;<BR>
j=2*i;<BR>
a[6]++;<BR> }<BR> else
j=m+1;<BR> }<BR> r[i]=rec;<BR>
}</P>
<P>void Heap_sort(r,n) /* 堆 排 序 */<BR>struct
record r[];<BR>int n;<BR> {<BR> int
l;<BR> a[6]=0;b[6]=0;<BR>
for(l=1;l<=n;l++)<BR>
printf("%4d",r[l].key);<BR> printf("\n");<BR>
for(l=n/2;l>=1;l--)<BR> heap(r,l,n);<BR>
for(l=n;l>=2;l--)<BR> {
rec=r[1];<BR>
r[1]=r[l];<BR>
r[l]=rec;<BR>
a[6]=a[6]+3;<BR>
heap(r,1,l-1);<BR> }<BR>
printf("****************************堆 排
序***************************\n");<BR>
for(l=n;l>=1;l--)<BR>
printf("%4d",r[l].key);<BR>
printf("\n");<BR> printf("move: %d
time, compete: %d time
",a[6],b[6]);<BR> printf("\n");<BR> }</P>
<P> compete()<BR>{<BR>
printf(" ** 内 部 排 序
结 果 汇 总
**
\n");<BR> printf("
-------------------------------------------------------- \n");<BR>
printf("
移动次数
比较次数
\n");<BR> printf("
---------------------------------------------------------\n");<BR>
printf(" 直接插入
%6d
%8d \n
",a[1],b[1]);<BR> printf("
希尔排序
%6d
%8d \n
",a[2],b[2]);<BR> printf("
冒泡排序
%4d
%8d \n
",a[3],b[3]);<BR> printf("
快速排序
%4d
%8d \n
",a[4],b[4]);<BR> printf("
简单选择
%4d
%8d \n
",a[5],b[5]);<BR> printf("
堆的排序
%4d
%8d \n
",a[6],b[6]);<BR> printf("
-------------------------------------------------------
\n");<BR>}<BR>main()<BR>{char ch;<BR>int i,j,t,k;</P>
<P> printf("***************************\n
");<BR> printf("请选择初始时数的顺序\n");<BR> printf("1---完全有序的情况\n");<BR> printf("2---逆序的情况\n");<BR> printf("3---随机排序的情况\n");<BR> printf("0---退出\n");<BR> printf("***************************\n");<BR> ch=getch();<BR> switch(ch)<BR> {<BR> case
'1':
randomize();<BR> for(i=0;i<s;i++)<BR> printf("%5d",a[i]=random(100));<BR> for(i=0;i<s-1;i++)<BR> for(j=i+1;j<s;j++)<BR> if(a[i]>a[j])<BR> {t=a[i];<BR> a[i]=a[j];<BR> a[j]=t;<BR> }<BR> printf("完全有序的数列为:\n");<BR> for(i=0;i<s;i++)<BR> printf("%5d",a[i]);<BR> printf("\n");<BR> for(i=1;i<7;i++)<BR>{<BR>
printf("请选择排序算法\n");<BR> printf("
冒泡排序-------------------1\n");<BR> printf("
直接插入排序---------------2\n");<BR> printf("
简单选择排序---------------3\n");<BR> printf("
快速排序-------------------4\n");<BR> printf("
希尔排序-------------------5\n");<BR> printf("
堆排序---------------------6\n");<BR> printf("
退出-----------------------0\n");<BR> ch=getch();<BR> switch(ch)<BR> {case
'0':exit(0);<BR> case'1': Bubblle_sort(a,s);break;<BR> case'2':
Straight_insert_sort(a,s);break;<BR> case'3':
Simple_select_sort(a,s);break;<BR> case'4':
Quick_sort(a,0,s-1);break;<BR> case'5':
Shell_sort(a,s);break;<BR> case'6':
Heap_sort(a,s);break;<BR> default:exit(0);<BR> }<BR> }break;<BR>
case '2': randomize();<BR> for(i=0;i<s;i++)<BR>
printf("%5d",a[i]=random(100));<BR> for(i=0;i<s-1;i++)<BR>
for(j=i+1;j<s;j++)<BR> if(a[i]<a[j])<BR> {t=a[i];<BR>
a[i]=a[j];<BR> a[j]=t;<BR> }<BR>
printf("逆序的数列为:\n");<BR> for(i=0;i<s;i++)<BR>
printf("%5d",a[i]);<BR> printf("\n");<BR>
for(i=0;i<7;i++){<BR> printf("请选择排序算法\n");<BR> printf("
冒泡排序-------------------1\n");<BR> printf("
直接插入排序---------------2\n");<BR> printf("
简单选择排序---------------3\n");<BR> printf("
快速排序-------------------4\n");<BR> printf("
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -