递归,”冒泡”两种方法对数字大小排序
这里按照从大到小排列
递归:将首尾元素记为a[first]和a[last],将首元素记为分割元素part_element,于是数组第一个位置相当于空出一个位置。在last--与first++的过程中first所指向的元素若小于分割元素则将该数移到last指向的位置,同理若last指向的数打于分割元素则将该数移到当前first指向的位置。当first=last(这个值记为middle)时将part_element的值赋给middle所在的位置。这样一次循环后middle左侧的数都大于middle,右侧的数都小于middle。之后递归使用这种方法即为整个程序的思路。
#include
#define N 4
void recursive(int a[],int fitst,int last);
int splitsort(int a[],int first,int last);
int main()
{
int i;
int a[N];
printf("请输入%d个数:",N);
for(i=0;i < N;i++)
{scanf("%d",&a[i]);}
recursive(a,0,N-1);
printf("以下是排序结果:\n");
for(i=0;i < N;i++)
{printf("%d ",a[i]);}
printf("\n");
return 0;
}
void recursive(int a[],int first,int last)//递归使用splitsort函数
{
int middle;//middle作为一次调用splitsort后的函数返回值,即当前的分割数所在的位置
if(first >= last){return;}
middle=splitsort(a,first,last);
recursive(a,first,middle-1);
recursive(a,middle+1,last);
}
int splitsort(int a[],int first,int last)//二分法
{
int part_element=a[first];
for(;;)
{
while(first<=last&&part_element >= a[last])
{last--;}
if(first >= last)
{break;}
a[first++]=a[last];
while(first<=last&&part_element <= a[first])
{first++;}
if(first >= last)
{break;}
a[last--] = a[first];
}
a[last]=part_element;
return (last);
}
“冒泡法”:该排序的方法是利用了for循环进行嵌套,相比于第一种方法解决排序问
题
快递公司问题件快递公司问题件货款处理关于圆的周长面积重点题型关于解方程组的题及答案关于南海问题
更加地简洁。这个名字正是在形象化地描述这种方法的实质。当有N 个元素时第一层循环进行N-1次,第二层循环次数逐渐减少。当然也可以第一层进行N次循环,第二层每次都进行N-1次循环,不过这样就大大降低了运行效率。
#include
#define N 10
int main()
{
int i,a[N],j,t;
printf("请输入%d个数:",N);
for(i=0;ia[j+1])
{
t=a[j];
a[j]=a[j+1];
a[j+1]=t;
}
}
}
printf("排序后的结果如下:\n");
for(i=0;i
本文档为【递归,“冒泡”两种方法排序】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑,
图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。