CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C++ Builder >  基础类

n个数排序,最坏情况下的最小交换次数是多少呢?

楼主benbebnmao(苯笨猫)2004-07-01 13:58:46 在 C++ Builder / 基础类 提问

什么是最坏情况下?是将“987654321”排成“123456789的情况”??将逆序排成正序的情况?  
  有的文章说最少要n-1次,对吗?为什么?  
  它的证明如下:  
    证明:一:当未排序元素大于2时,每次交换都至少可以将一个元素放到它正确的位置上;当未排序元素等于2时,只要一次就可以把两个元素放到它正确的位置上。所以,最多需要n-1次。  
            二:若该序列为整数序列2,3,…,n,1。要将这个数列排序,必须把2到n共n-1个数往后移动。但是,每次交换只能将一个数字往后移动,所以至少需要n-1次交换才能完成排序。  
   
  第一步中:“每次交换都至少可以将一个元素放到它正确的位置上”是什么意思?  
  第二步中,怎么能用“若该序列为整数序列2,3,…,n,1”这样一个具体例子来证明   呢?证明要不失一般性!  
   
    你的观点呢?多谢指教  
  问题点数:20、回复次数:9Top

1 楼csdn2010(陈一凡(上海)(结交所有程序员,尤其))回复于 2004-07-01 13:59:55 得分 0

 
  你在哪里工作啊?  
   
  你多大?你叫?  
   
  我很想与你成为朋友啊!我叫陈一凡,男,22岁,你可以介绍一下自己吗?  
   
  你擅长设么?我的手机:13916316917  
   
  收到后发个消息给我吧!!Top

2 楼csdn2010(陈一凡(上海)(结交所有程序员,尤其))回复于 2004-07-01 14:00:06 得分 0

 
  要源代码可以看《数据结构(C语言版)》清华大学出版社,--注意是   黄国瑜   叶乃菁的不是严蔚敏的。  
   
  如果是C++的话,〈数据结构C++语言描述〉william   Ford   william   Topp著,清华大学出版社  
   
  这两本书都有源代码,不是伪码  
   
  程序设计艺术(三卷本)是数据结构原理方面的经典,STL源码是实现的经典!  
  Top

3 楼futulove(福途£爱)回复于 2004-07-01 14:26:18 得分 0

Top

4 楼benbebnmao(苯笨猫)回复于 2004-07-01 15:34:46 得分 0

是啊,什么和什么啊?  
  我也不知道他在干什么?Top

5 楼xjq2003(xjq2003)回复于 2004-07-01 16:58:40 得分 0

UPTop

6 楼mli0080(leslie)回复于 2005-04-02 11:12:57 得分 4

这是一个比较大的算法呢,我现在手中就有一个这样的问题(有7个不同的数,要得到所有按不同位置排列出来的结果),我用过穷举法(通过7个循环),效率太低了,想找一个更好的算法,Top

7 楼huanyun(无妻徒刑)回复于 2005-04-02 11:20:08 得分 3

使用堆排序的话   复杂度恒定   约为N*   log2   NTop

8 楼huanyun(无妻徒刑)回复于 2005-04-02 11:21:23 得分 5

这是一个比较大的算法呢,我现在手中就有一个这样的问题(有7个不同的数,要得到所有按不同位置排列出来的结果),我用过穷举法(通过7个循环),效率太低了,想找一个更好的算法,  
   
  简单   7个数排序   越大的放前面  
  比如   9432467     数字排序   9764432   就是最大的Top

9 楼jadeluo(秀峰)回复于 2005-04-02 12:50:59 得分 8

楼主,不同的排序算法,它们的最坏情况是不同的。  
   
   
  设有以下这种交换排序算法:  
   
  数组a(1),   a(2),   a(3),   ...,   a(n)  
   
  如果a(1),   ...,   a(i-1)是已经按要求排序好了的,   则对a(i),   ...,   a(n)的排序可以这样进行:  
   
  1.   找出a(i),   ...,   a(n)中的最小值元素的下标j;  
  2.   交换a(i)和a(j);  
  3.   对a(i+1),   ...,   a(n)继续以上处理,直至全部处理完毕。  
   
  对于这种算法,   如果数组初始情况类似于:   2,   3,   4,   5,   6,   7,   8,   9,   1的话,   就是所谓的最坏情况了,此时需要交换的次数是n-1次。  
   
  Top

相关问题

  • 求方法!将一个数组的前k个数和后n-k个数交换,要求时间O(n),空间O(1)???
  • 两个数交换100分
  • 关于交换两个数的问题!
  • 两个数组交换,为什么不一样
  • 怎么无法实现两个数的交换??
  • 两个数据库之间的数据交换
  • 如何不用变量交换两个数
  • 怎么样才能把第1个数和最后一个交换
  • 两个数据库跨网络进行数据交换怎样做呢?
  • 求1 … N 个数的排列方法

关键词

  • 排序
  • 算法
  • 交换
  • 数据结构
  • 最坏
  • 个数
  • 元素
  • 序列
  • 情况
  • 证明

得分解答快速导航

  • 帖主:benbebnmao
  • mli0080
  • huanyun
  • huanyun
  • jadeluo

相关链接

  • CSDN Blog
  • 技术文档
  • 代码下载
  • 第二书店
  • 读书频道

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo