有条件限制的全排序算法

 问题描述:

{3,2,2,6,7,8} 排列输出,7不在第二位,68不在一起

 

算法描述:

本算法基于邻位交换法,使用数字本身而不是索引(即它们在list中下标)作为交换的依据,这样可以有效解决数字2的重复出现问题。至于其他两个限制条件,采用在print的时候过滤掉。

以下描述邻位交换法的文字描述:

前提:

1. 给每个元素定一个方向,初始化为左边。

2.如果一个元素比其方向所指向的邻位元素更大,则该元素定义为活动点。

算法:

0.初始化方向为左边

1.找出最大的活动点,找不到则退出

2.输出当前排列,让最大活动点进行邻位交换,

3.让所有大于最大活动点的元素指向相反方向。

4.流程转入1

 

上述邻位交换法实际上可以改进,如果让list呈从小到大的排列,则最大的元素将会从list尾部交换到list头部,然后执行上述算法1,2,3步骤,紧接着最大的元素将会从list头部交换到尾部,一直循环下去,,,直到找不到最大的活动点为止

 

代码:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值