当前位置:首页 » 编程语言 » c语言递归排序

c语言递归排序

发布时间: 2022-09-10 07:04:58

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);

热点内容
qt编译vlcqt库 发布:2025-01-12 23:24:45 浏览:244
攻击linux服务器 发布:2025-01-12 23:17:01 浏览:6
天籁哪个配置亲民 发布:2025-01-12 23:16:26 浏览:482
零售通交易密码是什么 发布:2025-01-12 23:13:02 浏览:319
监控器压缩 发布:2025-01-12 22:51:29 浏览:248
android加密工具 发布:2025-01-12 22:51:19 浏览:896
服务器ip是东方有线 发布:2025-01-12 22:32:07 浏览:843
数据源码补码 发布:2025-01-12 22:29:41 浏览:868
魅族账号密码忘记怎么办啊 发布:2025-01-12 22:05:12 浏览:510
ps工作需要什么配置电脑 发布:2025-01-12 21:52:22 浏览:606