排序算法学习

  • 冒泡排序基本思想:待排序列从后往前遍历,当相邻两个数据的大小与排序规则不符时,两个记录互换;如无交换即排序完成;
  • 快速排序基本思想:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。           
  • 选择排序基本思想:每次都人待排序列中选一个最小的。
  • 堆排序基本思想: 将所有待排序的元素组成一个堆,然后不断弹出堆顶的元素并调用函数维持堆序,直到所有元素均被弹出后,排序完成。被弹出的元素序列即一个有序数列。
  • 插入排序基本思想:对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。需要反复把已排序元素逐步向后移动,为最新元素提供插入空间。
  • 希尔排序基本思想:将需要排序的序列划分为若干个较小的序列,对这些序列进行直接插入排序,通过这样的操作可使用需要排序的数列基本有序,最后再使用一次直接插入排序。这样,首先对数量较小的序列进行直接插入排序可提高效率,最后对基本有序的序列进行直拦插入排序,也可提高效率,从而使整个排序过程的效率得到提升
  • 合并排序基本思想:就是将两个或多个有序表合并成一个有序表。
  • 桶排序基本思想:是将数列分到有限数量的桶子里。每个桶子再个别排序(每个桶有可能再使用别的排序算法或是以递回方式继续使用桶排序进行排序)。最后依次输出每个桶里面的数字,且每个桶中的数字从小到大输出,这样就得到所有数字排好序的一个序列了。   

  • 计数排序基本思想:是对于给定的输入序列中的每一个元素x,确定该序列中值小于x的元素的个数。一旦有了这个信息,就可以将x直接存放到最终的输出序列的正确位置上。例如,如果输入序列中只有17个元素的值小于x的值,则x可以直接存放在输出序列的第18个位置上。当然,如果有多个元素具有相同的值时,我们不能将这些元素放在输出序列的同一个位置上,因此,上述方案还要作适当的修改。

  • 基数排序Radix sort:原理类似桶排序,这里总是需要10个桶,多次使用
    首先以个位数的值进行装桶,即个位数为1则放入1号桶,为9则放入9号桶,暂时忽视十位数
    例如
    待排序数组[62,14,59,88,16]简单点五个数字
    分配10个桶,桶编号为0-9,以个位数数字为桶编号依次入桶,变成下边这样
    |  0  |  0  | 62 |  0  | 14 |  0  | 16 |  0  |  88 | 59 |
    |  0  |  1  |  2  |  3  |  4 |  5  |  6  |  7  |  8  |  9  |桶编号
    将桶里的数字顺序取出来,
    输出结果:[62,14,16,88,59]
    再次入桶,不过这次以十位数的数字为准,进入相应的桶,变成下边这样:
    由于前边做了个位数的排序,所以当十位数相等时,个位数字是由小到大的顺序入桶的,就是说,入完桶还是有序
    |  0  | 14,16 |  0  |  0  |  0  | 59 | 62  | 0  | 88  |  0  |
    |  0  |  1      |  2  |  3  |  4  |  5  |  6  |  7  |  8  |  9  |桶编号
    因为没有大过100的数字,没有百位数,所以到这排序完毕,顺序取出即可
    最后输出结果:[14,16,59,62,88]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值