當前位置:首頁 » 編程語言 » 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);

熱點內容
會員過期緩存的能看嗎不聯網 發布:2025-01-12 21:16:47 瀏覽:768
演算法工作原理 發布:2025-01-12 20:36:38 瀏覽:25
網路訪問監控軟體 發布:2025-01-12 20:26:57 瀏覽:466
養羊啦源碼 發布:2025-01-12 20:25:48 瀏覽:571
軒逸朗逸哪個配置最好 發布:2025-01-12 20:10:00 瀏覽:50
主板存儲器分 發布:2025-01-12 20:04:46 瀏覽:377
資料庫邏輯運算 發布:2025-01-12 20:03:54 瀏覽:572
javawindows伺服器搭建 發布:2025-01-12 19:59:37 瀏覽:571
linux關閉iptables 發布:2025-01-12 19:58:49 瀏覽:151
伺服器電腦名字改了影響資料庫嗎 發布:2025-01-12 19:58:44 瀏覽:653