Algorithm 4th------初级排序算法总结

排序算法

  在日常生产生活中,将杂乱的一组数据转换成有顺序的另一组数据所使用的算法叫做排序算法.那么最基础的排序算法都有哪些?

0.冒泡排序

  主要思想:循环比较相邻数据并交换符合一定条件(升序则为靠前数据大于靠后数据)的数据,第i次循环都会使第i小或第i大的数据交换到正确的位置.

伪代码

for i=1 to a.length-1:
    for j=a.length to i+1:
        if a[j]<a[j-1]
            exchange a[j],a[j-1]
    exit;
exit;

1.选择排序

  主要思想:循环寻找未排序序列中最小(大)元素并将其放置正确的位置.

伪代码:

for i=1 to a.length
    for j=i+1 to a.length
        if a[i]>a[j]
            exchange a[i],a[j]
    exit;
exit;

2.插入排序

  主要思想:循环将未排序的元素插入到已排好序的序列中.

  伪代码:

for i=2 to a.length
    for j=1 to i-1
        if a[i]<a[j]
            exchange a[i],a[j]
    exit;
exit;

3.希尔排序

  主要思想:改进的插入排序,由于每次插入排序需要比较的次数太多,可以考虑先生成h间隔的有序数组,h的值递减至1时,数组排序完成.
例如数组:
H E L L O W R O L D H E L L O P R O G R A M
设数组个数为L,一般h的初值设置条件为h<L且h=(1,4,13,…)中的最大值,比较科学,例如该数组个数为22,那么h的初值为13
那么每次h的值递减,得到的结果依次为:
13-sort:H E L L O G R A L D H E L L O P R O W R O M
4-sort:H D H A L E L E L G O L O L R P O M W R R O
1-sort:A D E E G H H L L L L L M O O O O P R R R W

伪代码:

h=1,N=a.length
while(h<N/3)
    h=3*h+1
while(h>=1)
    for i=h to N
        for(j=i;j>=h&&a[j]<a[j-h];j-=h)
            exchange(a[j],a[j-h])
        exit
    h=h/3
    exit
exit

算法复杂度分析

排序算法时间复杂度
冒泡算法 O(n2) O ( n 2 )
选择排序 O(n2) O ( n 2 )
插入排序 O(n2) O ( n 2 )
希尔排序根据h的值复杂度不同,不好确定,但一般会比 O(n2) O ( n 2 )
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值