1.    Even法生成排列

1.1.算法描述

Even算法的过程描述如下

(1)求出最大的活动整数m

(2)交换m和其箭头所掼向的与其相信的整数。

(3)交换所有满足p>m的整数的p的方向。

1.2.算法分析

由于每个数字还带有方向这个属性,因些需要使用自己定义数据类型。本算法中用一个结构来表示,结构有两个域,一个代表值,一个代码方向。

算法最大的难点在于,一是判断当前元素是否活动,二是需要找到最大的活动的元素。

通过试验生成过程,可以发现,其中最活跃的元素就是最大的那个元素,因为每交换一个比它小的元素,它都会由不活动状态变成活动状态。因此,在算法的实现上,要格外关注最大的那个元素。事实上,整个算法主要是在将最大的那个元素进行移动。也对最大的那个元素的位置进行了标识。

判断当前元素是否活动,有三种情况是不活动的:

1. 该元素在第一位,并且指向左边。

2. 该元素在最后一位,并且指向右边。

3. 该元素在中间,并且指向的元素比它要大。

通过这三个条件,就可判断当前元素是否活动的。

考虑扩展性,可排列的元素可以不从0开始,也可以不连续。因为排列归根结底是对元素的下标进行排列。因些可考虑让用户自己定义打印算法。

  1Even法生成排列#ifndef U8
  2Even法生成排列#define U8 unsigned char
  3Even法生成排列#endif // U8
  4Even法生成排列
  5Even法生成排列#define DIR_LEFT 0 // 箭头向左
  6Even法生成排列#define DIR_RIGHT 1 // 箭头向右
  7Even法生成排列
  8Even法生成排列// 用于输出 一个排列
  9Even法生成排列typedef void(*AdjustCallback)(void *constint size);
 10Even法生成排列
 11Even法生成排列// 一个排列列的元素,它包括数字和这个数字上箭头的方向
 12Even法生成排列typedef struct Item
 13}

相关文章:

  • 2021-07-14
  • 2022-12-23
  • 2021-06-23
  • 2021-08-30
  • 2021-11-07
猜你喜欢
  • 2022-12-23
  • 2022-12-23
  • 2021-07-06
  • 2021-11-11
  • 2021-11-11
  • 2021-11-05
相关资源
相似解决方案