当前位置:三九宝宝网 → 宝宝教育 → 教学论文 → 正文

C语言实现非递归全排列

更新:01-03 整理:39baobao.com
字体:

[用VB语言把10数从小到大排列]dim a(9) as integer'定义一个数组用于存放数据 for i=0 to 9 a(i)=int(rnd*100)'生成0-99之间的10个数字,放到数组里 next for i=0 to 9 for j=i to 9 if a(i)>a(j) then '...+阅读

#include

void swap(int *p, int *q) /* 交换值 */

{

int t;

t = *p;

*p = *q;

*q = t;

}

void newseq(int *data,int start,int last)

{

while(start < last)

{

swap(&data[start],&data[last]);

start++;

last--;

}

}

void show(int *data,int num) /* 显示数列 */

{

int i = 0;

for(i;i < num;i++)

{

printf(" %d ",data[i]);

}

printf("\n");

}

int findall(int *data,int num) /* 字典序算法*/

{

int i = 0,j = 0,tmp = 0;

int lastdata = num-1;

for(i = lastdata;i > 0;i--)

{

if(data[i] > data[i-1])

break;

}

if(0 == i)

return 0;

tmp = i;

for(j = lastdata;j >= i;j--)

{

if((data[j] > data[i-1]) && (data[j] < data[tmp]))

tmp = j;

}

swap(&data[tmp],&data[i-1]);

newseq(data,i,lastdata);

return 1;

}

int main(void)

{

int data[3]={1,2,3};

show(data,3);

while(findall(data,3))

{

show(data,3);

}

return 0;

}

打印结果如下:

1 2 3

1 3 2

2 1 3

2 3 1

3 1 2

3 2 1

本文地址:https://www.39baobao.com/show/29_22337.html

以上内容来自互联网,请自行判断内容的正确性。若本站收录的信息无意侵犯了贵司版权,请联系我们,我们会及时处理和回复,谢谢.

以下为关联文档:

c语言实现二叉树的先序中序后序的递归和非递归算法和层次遍历#include// malloc()等 #include// 标准输入输出头文件,包括EOF(=^Z或F6),NULL等 #include// atoi(),exit() #include// 数学函数头文件,包括floor(),ceil(),abs()等#define Cle...

如何快速更改PPT幻灯片的排列顺序在PPT演示文稿中,幻灯片的排列顺序决定了幻灯片的播放顺序,如果这个百顺序不符合要求,用户可以根据需要移动幻灯片来改变这个顺序。另外,通过剪切和粘贴的方法,同样能够快速改变...

中考句子排列题的方法技巧举几个例子我有急用谢了1.排序题要求在注意语言表达的整体性、连贯性原则以外,还要多角度地寻找解决问题的切入口。句子排序问题应该注意以下几个问题:①揣摩语段的整体意义,理清选项内容所提供的信息...

C语言数组排列怎么做最常用的就是冒泡排序的方法了。 比如对10个数字进行排序,则程序是这样的 #include<stdio.h>void main(){int a[10];int i,j, t;printf("输入十个数字:\n");for(i=0;i<=9;i++){sca...

求大神解答一道C语言题:用二分法在顺序排列的字典中查找单词#include <stdio.h> #include <string.h> void binary_search(char key[100], char a[100][100], int n) /*自定义函数binary_search*/ { int low, high, mid, count = 0, c...

C语言递归倒序输出字符串#include<stdio.h> void f() { char ch; if((ch = getchar())!='\n') f(); if(ch!='\n') printf("%c", ch); //这个输出语句是写在了递归调用之后,会被压栈,先压栈的后输出,所以可...

c语言选排列算法该函数求得是自由组合数,输出是An取k的所有可能组合 #include <stdio.h> int n,k,a[10]; long count=0; void perm2(int j) { int i,p,t; if(j==k) //执行条件j=k { for(i=k;...

求解c语言一递归迷宫问题给你给伪算法:(设坐标为x,y,坐标向右和下延生。)函数:{ 判断当前是不是(7,7),如果是,表示走出迷宫。打印轨迹 1 尝试往左先走一步(x-1,如果x小于0,或者对应位置标识为阻塞) 2 1如果成功,用...

c语言里用递归实现链表反向打印打开NewContactList工程文件, 相关的修改的程序文件如下(未修改的没有post 上去)。 ContactList.h文件如下: /* *ContactList.h * * created on Jul 6, 2014 * Author: *** * *...