`
bianku
  • 浏览: 72408 次
  • 性别: Icon_minigender_1
  • 来自: 常州
社区版块
存档分类
最新评论

排列方法

阅读更多

 排序有很多种方法,常用的有三种:冒泡排序、选择排序、插入排序等,下面我们就对这三种方法做一下分析和比较,以便大家能够更好的理解和应用。

  一、冒泡排序

  1、冒泡排序的基本思想:对于n个数进行排序(现假定是从大到小排序,以下均按此进行),将相邻两个数依次比较,将大数调在前头:也就是说第一个数和第二个数比较,大数放前,小数放后,第二个和第三个进行比较,大数放前、小数放后,然后依次类推。。。经过第一轮比较以后,我们找到一个最小数在最下面(沉底)。然后进行下一轮比较,最后一个数就不用再参加比较了,所以本轮就可以少比较一次。

  很显然,需要用双重循环来设计这个问题,外层循环控制进行的轮数,内层循环控制每轮比较的次数,那么到底需要多少轮、每轮需要多少次,我们通过一个实例看一下:

  2、排序过程举例:

  外循环
  1轮
  2轮
  3轮
  4轮

  内循环
  5个数比较4次
  4个数比较3次
  3个数比较2次
  2个数比较1次

  


  最小的数5沉底,其余4个数继续比较
  次小数6沉底,其余3个数
  7沉底,其余2个数比较
  最后两个数一次比较

  那么通过这个排序过程,我们了解了怎样去进行排序,那么到底谁是气泡呢,我们可以从中找出答案,那么从大到小进行排序,较大的一些数就是气泡。随着排序的进行,气泡逐步上升。

  从这个排序过种中,还可以看出,5个数实际经过4轮就可以了,实践证明,n个数最多需要n-1轮排序就可以了。

  3、冒泡排序的程序如下:

  for(i=0;i<10;i++)

  for(j=0;j<10-i;j++)

   if(a[j]<a[j+1])

   {t=a[j];a[j]=a[j+1];a[j+1]=t;}

  在此程序段的上面加上输入部分和在程序段加上排序后的输出。

  程序的改进:

   4、算法的改进:

  从上面的排序的过程可以看出,如果一个已经排好序的一组数或者经过很少的轮数就可以排完这些数,但是循环还是要继续进行,这样设计出的程序浪费了大量的时间,所以对一这个算法我们可以重新设计。

  经过修改后的程如下:

  for(i=0;i<10&&!swap;i++)

  {

  swap=1;

  for(j=0;j<10-I;j++)

   if(a[j]<a[j+1])

   {t=a[j];a[j]=a[j+1];a[j+1]=t;swap=0;}

  }

  二、选择排序

  1、排序的基本思想:先从第一个数开始起,用第一个数和其它的数进行比较,如果比第一个数大就交换位置,否则不进行交换,这样经过第一轮比较我们就能够找出最大值放在第一位置,然后从第二个位置起再找次大数,这样依次下去,就可以进行整个数的排序,实践证明,n个数最多需要n-1轮排序就可以了。

  2、排序过程举例:

  外循环
  1轮
  2轮
  3轮
  4轮

  内循环
  5个数比较4次
  4个数比较3次
  3个数比较2次
  2个数比较1次

  

  最大的数9找到,其余4个数找次大数
  次大数8找到,其余3个数找
  7找到,其余2个数找
  最后两个数一次比较

  选择排序较冒泡容易理解,程序编写也要相对容易一些。---www.bianceng.cn

  for(i=0;i<10;i++)

  for(j=i+1;j<10;j++)

   if(a[i]<a[j])

   {t=a[i];a[i]=a[j];a[j]=t;}

  对于选择排序,我们也可以看到一个问题,如第一轮排序中,我们要找的是9才是最大值,所以其它的交换完全没有必要进行,其它各轮都存在这样的情况,所以我们可以想办法取消这种情况,也就是说我们真正找到的最大值的位置后再进行交换。

  for(i=0;i<10;i++)

  { p=i;

  for(j=i+1;j<10;j++)

   if(a[p]<a[j])

   p=j;

  if(p!=i)

  {t=a[i];a[i]=a[j];a[j]=t;}

  }

  这样算法经过改进以后就较好地解决了这个问题。

 

分享到:
评论

相关推荐

    篮球单循环比赛排列方法.pdf

    由于提供的文件内容较为混乱,并且包含大量可能由于OCR扫描错误而导致的乱码,因此将尽可能地从现有的信息中提取出有关篮球单循环比赛排列方法的知识点。 首先,标题“篮球单循环比赛排列方法.pdf”表明这份文件是...

    行业文档-设计装置-一种换热装置中传热管的排列方法.zip

    本篇文章将深入探讨“一种换热装置中传热管的排列方法”,帮助读者理解这种创新设计的原理、优势以及实际应用。 一、传热管排列的重要性 传热管在换热装置中的布局决定了流体的流动路径和热量交换的效率。合理的...

    多窗口快速排列方法、多窗口快速排列系统及移动装置.zip

    标题中的“多窗口快速排列方法、多窗口快速排列系统及移动装置”暗示了这是一个关于操作系统或用户界面设计的技术性主题,特别关注在移动设备上如何高效地管理和操作多个窗口。这个压缩包包含了一个名为“多窗口快速...

    电子政务-印刷电路板钻孔机或成型机钻轴的排列方法.zip

    本资料主要探讨的是印刷电路板钻孔机或成型机钻轴的排列方法,这一技术对于提升PCB生产效率和质量至关重要。 印刷电路板的钻孔工艺通常涉及到多轴钻孔机,这些机器装备有多根钻轴,能够同时对PCB进行多个孔的加工。...

    电信设备-一种图标的排列方法、装置及移动终端.zip

    【标题】中的“电信设备-一种图标的排列方法、装置及移动终端”表明这是一个关于电信设备,特别是涉及用户界面设计的技术方案,它可能涉及到移动设备上的图标排列逻辑、交互方式或者优化用户体验的方法。 【描述】...

    行业文档-设计装置-纸烟或雪茄烟在装烟时每支烟在烟盒内的排列方法.zip

    《行业文档-设计装置-纸烟或雪茄烟在装烟时每支烟在烟盒内的排列方法》 本文档主要探讨的是烟草制品,特别是纸烟和雪茄烟,在包装过程中如何有效地排列于烟盒之内,以确保产品的美观、安全以及消费者的使用体验。...

    行业分类-设备装置-一种面向3D打印的模型分解与排列方法.zip

    本文将深入探讨标题和描述中提及的“一种面向3D打印的模型分解与排列方法”。 首先,模型分解是指将复杂的3D模型拆分成多个简单的几何体或部件,这个过程也称为切片。在3D打印中,每个分解后的薄片都会被转换为...

    电信设备-一种操作菜单排列方法及移动终端.zip

    标题中的“电信设备-一种操作菜单排列方法及移动终端”主要涉及的是移动设备,特别是电信设备上用户界面设计和交互性的优化。这个主题通常包括如何有效地组织和展示操作菜单,以便用户能更直观、高效地使用移动终端...

    行业分类-电子-基于大功率转换潮汐能的发电机排列方法的说明分析.rar

    本文将深入探讨"基于大功率转换潮汐能的发电机排列方法"这一主题,旨在提高潮汐能发电系统的效率和可靠性。 在电子行业中,大功率转换技术是关键的一环,它涉及到电能的高效采集、转换和分配。潮汐能发电机的排列...

    设计排列设计排列设计排列

    描述中的重复文字"设计排列设计排列设计排列设计排列设计排列设计排列设计排列设计排列"强调了设计排列在整个设计流程中的核心地位。这表明设计者需要不断审视和调整元素的位置、大小、颜色和空间关系,以达到最佳的...

    行业资料-交通装置-一种交通工具座位排列方法.zip

    行业资料-交通装置-一种交通工具座位排列方法.zip

    C#实现排列组合算法完整实例

    在两个排列方法中,都包含了对参数的有效性检查,如果`R`大于`N`或者`N`或`R`小于等于0,则抛出`ArgumentException`异常。同时,在可能产生整数溢出的情况下,使用`checked`块捕获`OverflowException`。 在实际...

    排列和组合概念和应用

    所以总共有C(10,5) * 4种排列方法。 练习题的解答如下: - 两种葵花不种在中间,也不种在两端的花盆里,有7-2=5个位置可以选择,共有C(5,2) * C(4,1) * A(3,3)种种法。 - 7人站成一排,甲乙相邻且丙丁相邻,可以先...

    正交排列测试方法 正交排列测试方法

    "正交排列测试方法" 在软件测试中,设计测试用例是一个非常重要的步骤。然而,在设计测试用例时,我们经常会遇到一些问题,如测试用例太多、测试时间太长、测试成本太高等。为了解决这些问题,我们可以使用正交排列...

    方法技巧专题21 排列组合与二项式定理(解析版).docx

    3. 特殊元素、特殊位置的排列问题:该类问题主要涉及到特殊元素或特殊位置的排列方法,例如,甲不在两端、甲、乙相邻、甲、乙、丙三人两两不得相邻等。 4. 相邻元素的排列问题:该类问题主要涉及到相邻元素的排列...

    输出一个集合a1,a2,a3,••••••an的所有排列

    排列方法 `permutation(int k)`方法是递归生成所有排列的核心方法。如果k大于或等于数组a的长度,输出当前排列,否则,遍历从k到数组a的长度,交换每个元素,并递归调用`permutation(k + 1)`方法。 打印方法 `...

    数学广角排列.doc

    在巩固和拓展阶段,通过解决实际问题,如拍照和排队照相的情境,学生进一步应用所学的排列知识,加深了对有序思考的必要性和排列方法多样性的理解。 最后,课程以学生的自我反思和总结结束,让学生回顾学习内容,...

    MM排列组合,Delphi示例源码..rar

    - 生成排列方法:实现MM算法的具体逻辑,包括回溯和填充操作。 代码fans.net可能是提供Delphi源码下载的网站,你可以在那里找到具体的实现细节。源码通常会包含注释,帮助理解算法的工作原理和具体实现。通过分析和...

    回溯法 - 输出自然数1到n所有不重复的排列,即n的全排列

    尝试排列方法 `tryArrangement(int k)` ```java public void tryArrangement(int k) { for (int j = 1; j ; j++) { // 遍历1到n if (d[j] == 0) { // 如果该数字未被使用 a[k] = j; // 将数字放入当前位置 d[j...

Global site tag (gtag.js) - Google Analytics