c语言递归排序
㈠ c语言:用递归的方式对数组排序:
#include<stdio.h>
#defineN100
voidselection_sort(inta[],intlen);
intmain()
{
inta[N],i=0,len;
while(scanf("%d",&a[i])==1)
{
i++;
}
len=i;
selection_sort(a,len);
for(i=0;i<len;i++)
{
if(i==0)
printf("%d",a[i]);
else
printf("%d",a[i]);
}
printf("
");
return0;
}
voidselection_sort(inta[],intlen)
{inti,j,t;
for(i=j=0;i<len;i++)
if(a[i]>a[j])j=i;
t=a[len-1];a[len-1]=a[j];a[j]=t;
if(len>1)selection_sort(a,len-1);
}
㈡ C语言递归问题(全排列)
#include <stdio.h>
void swap(char &a,char &b,char c)
{
c=a; a=b; b=c;
}
void perm (char*list,int i,int n)
{
int j,temp;
if(i==n)
{
for(j=0;j<=n;j++)
printf("%c",list[j]);
printf(" ");
}
else
{
for(j=i;j<=n;j++)
{
swap(list[i],list[j],temp);
perm(list,i+1,n);
swap(list[i],list[j],temp);
}
}
}
void main()
{
char list[3]={'A','B','C'};
perm(list,0,2);
}
㈢ c语言 递归实现数组排序
#include<stdio.h>
#define SIZE 100
int arr[SIZE], n;
void arrsort(int pos){
if(pos == n-1) return;
arrsort(pos+1);
int i = pos+1, temp = arr[pos];
while(i < n){
if(arr[i] < temp){
arr[i-1] = arr[i];
i++;
}
else break;
}
i --;
arr[i] = temp;
}
void print(){
int i;
for(i = 0; i < n; i++)
printf("%d ", arr[i]);
printf("\n");
}
int main(){
int i;
printf("输入待排序的数据的个数:");
scanf("%d", &n);
printf("输入数据,空格为分隔符号:\n");
for(i = 0; i < n; i++)
scanf("%d", &arr[i]);
printf("排序前:\n");
print();
arrsort(0);
printf("排序后:\n");
print();
return 0;
}
㈣ C语言:指针作函数参数,运用递归,排列问题
long
int
(*p)();
long
int
f(int
n)
{if
(n>3)
return
(*p)(n-1)+(*p)(n-3);
else
return
n;
}
main()
{
long
int
r;
int
a;
p=f;
scanf("%d",&a);
r=(*p)(a);
printf("%ld",r);
}
另外和你说一下,你用不用函数指针写程序,与你的程序的运行速度是没关系的,递归主要是会消耗大量的栈空间.就是改成函数指针,也不会快些
㈤ 用c语言的递归怎么来写选择排序
选择排序的递归算法
#include <stdio.h>
select(int a[8],int m,int n)
{
int i,t,k;
k=m;
for(i=m+1;i<n;i++)
if(a[k]>a[i])
k=i;
if(k!=m)
{
t=a[k];
a[k]=a[m];
a[m]=t;
}
if(m<n)
select(a,m+1,n);
}
main()
{
int a[10]={46,55,13,42,94,17,05,70};
int i;
select(a,0,8);
for(i=0;i<8;i++)
printf("%4d",a[i]);
printf("\n");
}
㈥ 用c语言递归调用:对数组中10个整数按由小到大排序
#include <stdio.h>
int a[20];
void f(int n)
{
int i,t;
if(n<10)
{
f(n+1);
t=a[n];
for(i=n+1;i<=10;i++)
if(t>a[i])
a[i-1]=a[i];
else
break;
a[i-1]=t;
}
}
int main()
{
int i;
for(i=1;i<=10;i++)
scanf("%d",&a[i]);
f(1);
for(i=1;i<=10;i++)
printf("%d ",a[i]);
printf("\n");
return 0;
}
㈦ 递归全排列 c语言 看不懂
perm(list,i,j)是一个全排列函数,拿你上面的列子来说:
perm(list,0,5)意思是数组list的前6个数(第0个数到第5个数)的所有排列,它细分的话就等于:第0个数和第1个数互换以后的perm(list,1,5) 第0数和第2数互换perm(list,1,5) ....第0数和第5数互换的perm(list,1,5) 和它本身的所在0位置的perm(list, 1, 5)
如假如6个数是1 2 3 4 5 6
他们的排列就 * * * * * * perm(list,0,5)
1 * * * * * perm(list,1,5)
2 * * * * * perm(list,1,5)
3 * * * * * perm(list,1,5)
4 * * * * * perm(list,1,5)
5 * * * * * perm(list,1,5)
6 * * * * * perm(list,1,5) 就是每一个数都在第0个位置上面都出现一次以后的排列总和。 也就是它的for循环的意思
这只是形象的比喻一下
㈧ C语言递归解决数组排序
#include<stdio.h>
intMax(inta[],intlen)
{
if(len>1)
returna[len-1]>a[Max(a,len-1)]?len-1:Max(a,len-1);
return0;
}
intmain()
{
inta[10]={0,1,2,3,9,8,7,4,5,6};
printf("%d%d",Max(a,10),a[Max(a,10)]);
return0;
}
㈨ c语言,递归1~n按字典顺序全排列
#includevoidswap(char&a,char&b,charc){c=a;a=b;b=c;}voidperm(char*list,inti,intn){intj,temp;if(i==n){for(j=0;j<=n;j++)printf("%c",list[j]);printf("");}else{for(j=i;j<=n;j++){swap(list[i],list[j],temp);perm(list,i+1,n);swap(list[i],list[j],temp);}}}voidmain(){charlist[3]={'A','B','C'};perm(list,0,2);}
㈩ C语言递归快速排列
大概看下,首先你是用自定义函数int partition进行排序,但是函数并没有返回值return。应该是这个问题报错的
while(a[++i]<x){}
while(a[--j]>x){if(j==left)break;}
if(i<j)
swap(a[i],a[j]);
else break;
这段就不明白了,首先是获取由左数第一个比X大的数,然后又获取从右数第一个比X大的数,然后对两个数字的下标进行比较,这样很容易陷入死循环。
quickSort(a,left,p-1);
quickSort(a,p+1,right);