【数据结构第七周】排序(上)

1、简单排序

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
void Bubble_Sort( ElemenType A[], int N)
{
    for ( P = N-1; P >= 0 ; P--)
    {
        flag = 0;
        for (i = 0; i < P; ++i)
        {
            if (A[i] > A[i+1])
            {
                Swap(A[i],A[i+1]);
                flag = 1;
            }
        }
        if (flag == 0)
        {
            break;
        }
    }
}

最好情况:顺序T = O( N ) 

最坏情况:逆序 T = O( N^2 ) 

 

2、插入排序

1
2
3
4
5
6
7
8
9
10
11
12
13
void Insertion_Sort( ElementType A[], int N)
{
    for ( P = 1; P < N ; ++P)
    {
        Tmp = A[P];
        for (i = P; i > 0 && A[i-1] > Tmp; --i)
        {
            A[i] = A[i-1];
        }
        A[i] = Tmp;
 
    }
}

最好情况:顺序T = O( N ) 

最坏情况:逆序 T = O( N^2 ) 

 

定理:任意N个不同元素组成的序列平均具有 N ( N - 1 ) / 4 个逆序对。 

定理:任何仅以交换相邻两元素来排序的算 法,其平均时间复杂度为 Ω ( N^2 ) 。

要提高算法效率,我们必须每次消去不止1个逆序对!每次交换相隔较远的2个元素! 

 

3、希尔排序

定义增量序列DM >DM-1 >...>D1 =1

原始的希尔排序

DM =N/2, Dk =Dk+1 /2

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
void Shell_sort( ElementType A[], int N )
{
    for ( D=N/2; D>0; D/=2 )
    {
        for ( P=D; P<N; P++ )
        {
            Tmp = A[P];
            for ( i=P; i>=D && A[i-D]>Tmp; i-=D )
            {
                A[i] = A[i-D];
            }
            A[i] = Tmp;
        }
    }
}

最坏情况:T=θ(N^2)

 

4、堆排序

堆排序属于选择排序的一种。

选择排序的动画演示,蛮清楚的。http://visualgo.net/sorting.html

1
2
3
4
5
6
7
8
9
10
11
void Selection_Sort ( ElementType A[], int N )
{
    for (int i = 0; i < N; ++i)
    {
        MinPosition = ScanForMin( A, i, N–1 );
        /* 从A[i]到A[N–1]中找最小元,并将其位置赋给MinPosition */
 
        Swap( A[i], A[MinPosition] );
        /* 将未排序部分的最小元换到有序部分的最后位置 */
    }
}

堆排序的平均时间复杂度为O(n\mathrm{log}n),空间复杂度为\Theta(1)

堆排序相关资料:http://blog.sina.com.cn/s/blog_54f82cc20100zuho.html

http://zh.wikipedia.org/wiki/%E5%A0%86%E6%8E%92%E5%BA%8F

 

 

 

posted @   Summer先生  阅读(277)  评论(0编辑  收藏  举报
编辑推荐:
· .NET Core内存结构体系(Windows环境)底层原理浅谈
· C# 深度学习:对抗生成网络(GAN)训练头像生成模型
· .NET 适配 HarmonyOS 进展
· .NET 进程 stackoverflow异常后,还可以接收 TCP 连接请求吗?
· SQL Server统计信息更新会被阻塞或引起会话阻塞吗?
阅读排行:
· 本地部署 DeepSeek:小白也能轻松搞定!
· 传国玉玺易主,ai.com竟然跳转到国产AI
· 自己如何在本地电脑从零搭建DeepSeek!手把手教学,快来看看! (建议收藏)
· 我们是如何解决abp身上的几个痛点
· 如何基于DeepSeek开展AI项目
点击右上角即可分享
微信分享提示