设为首页 - 加入收藏
广告 1000x90
您的当前位置:黄大仙www78345 > 交换排列 > 正文

选择排序法

来源:未知 编辑:admin 时间:2019-08-08

  可选中1个或多个下面的关键词,搜索相关资料。也可直接点“搜索资料”搜索整个问题。

  冒泡排序和选择排序是排序算法中比较简单和容易实现的算法。冒泡排序的思想为:每一次排序过程,通过相邻元素的交换,将当前没有排好序中的最大(小)移到数组的最右(左)端。而选择排序的思想也很直观:每一次排序过程,我们获取当前没有排好序中的最大(小)的元素和数组最右(左)端的元素交换,循环这个过程即可实现对整个数组排序。

  由于程序比较简单,所以没有加什么注释。所有的程序都给出了完整的运行代码,并在我的VC环境

  下运行通过。因为没有涉及MFC和WINDOWS的内容,所以在BORLAND C++的平台上应该也不会有什么

  这是最原始,也是众所周知的最慢的算法了。他的名字的由来因为它的工作看来象是冒泡:

  上面我们给出了程序段,现在我们分析它:这里,影响我们算法性能的主要部分是循环和交换,

  显然,次数越多,性能就越差。从上面的程序我们可以看出循环的次数是固定的,为1+2+...+n-1。

  再看交换。从程序后面所跟的表可以看到,两种情况的循环相同,交换不同。其实交换本身同数据源的有序程度有极大的关系,当数据处于倒序的情况时,交换次数同循环一样(每次循环判断都会交换),复杂度为O(n*n)。当数据为正序,将不会有交换。复杂度为O(0)。乱序时处于中间状态。正是由于这样的原因,我们通常都是通过循环次数来对比算法。

  现在我们终于可以看到一点希望:选择法,这种方法提高了一点性能(某些情况下)这种方法类似我们人为的排序习惯:从数据中选择最小的同第一个值交换,在从省下的部分中选择最小的与第二个交换,这样往复下去。

  遗憾的是算法需要的循环次数依然是1/2*(n-1)*n。所以算法复杂度为O(n*n)。

  我们来看他的交换。由于每次外层循环只产生一次交换(只有一个最小值)。所以f(n)=n

  所以我们有f(n)=O(n)。所以,在数据较乱的时候,可以减少一定的交换次数。

本文链接:http://apkhealth.com/jiaohuanpailie/553.html

相关推荐:

网友评论:

栏目分类

现金彩票 联系QQ:24498872301 邮箱:24498872301@qq.com

Copyright © 2002-2011 DEDECMS. 现金彩票 版权所有 Power by DedeCms

Top