数据结构基础(3) –Permutation & 插入排序


Permutation(排列组合)

排列问题:

设R = {r1, r2, … , rn}是要进行排列的n个元素, Ri = R-{ri}; 集合X中元素的全排列记为Permutation(X), (ri)Permutation(X)表示在全排列Permutation(X)的每个排列前加上前缀ri得到的排列.

R的全排列可归纳定义以下:

当n=1时,Permutation(R)={r},r是集合R中唯1的元素;

当n>1时,Permutation(R)由(r1)Permutation(R1),(r2)Permutation(R2), …, (rn)Permutation(Rn)构成。

顺次递归定义,则可设计产生Permutation(X)的递归算法以下:

template <typename Type>
void permutation(Type *array, int front, int last)
{
//已递归到了最后1个元素
if (front == last)
{
//打印输出
for (int i = 0; i < front; ++i)
{
cout << array[i] << ‘ ‘;
}
cout << array[front] << endl;
return ;
}
else
{
for (int i = front; i <= last; ++i)
{
// 不断的从下标为[front ~ last]的元素当选择1个元素
//作为当前序列的开头元素
std::swap(array[front], array[i]);
permutation(array, front+1, last);
std::swap(array[front], array[i]);
}
}
}

算法说明:

算法Permutation(array, k, m)递归地产生所有前缀是array[0:k⑴],且后缀是array[k:m]的全排列的所有排列.函数调用(list, 0, n⑴)则产生list[0:n⑴]的全排列.

 

算法演示:

char str[] = “abc”;的递归调用进程如图:

小结:

虽然我们自己实现了Permutation, 但C++ STL中也实现了std::next_permutation算法, 在1般利用中, 我比较推荐使用STL中已实现好的next_permutation, 毕竟STL的代码质量还是非常高的, 而且速度1点也不逊色于我们的实现;

 

插入排序

插入排序是低级排序中速度最快的1种(冒泡/选择/插入排序效力均为O(N^2)),但是跟快速排序(NlogN),归并排序(NlogN)还是有1定的差距的⊙

波比源码 – 精品源码模版分享 | www.bobi11.com
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
7. 本站源码并不保证全部能正常使用,仅供有技术基础的人学习研究,请谨慎下载
8. 如遇到加密压缩包,请使用WINRAR解压,如遇到无法解压的请联系管理员!

波比源码 » 数据结构基础(3) –Permutation & 插入排序

2 评论

  1. Thank you for great content. Hello Administ. Onwin , Onwin Giriş , Onwin Güncel Giriş , Onwin Yeni Adres , onwin

  2. Hackdra’s smart contract auditing service ensures that decentralized applications and smart contracts are free of vulnerabilities and security loopholes. Request free smart contract audit now.

发表评论

Hi, 如果你对这款模板有疑问,可以跟我联系哦!

联系站长
赞助VIP 享更多特权,建议使用 QQ 登录
喜欢我嘛?喜欢就按“ctrl+D”收藏我吧!♡