C++数据结构第46课、排序的基本概念

排序是计算机内部经常进行的一种操作,其目的是将一组 “无序” 的数据元素调整为"有序"的数据元素。

那么排序的数学定义时什么呢?如下
在这里插入图片描述

  • 多关键字排序
    这个就是在排序时需要比较的关键字多余一个,那么是什么意思呢?就是当排序结果首先按关键字 1 进行排序,当关键字 1 相同时按关键字 2 进行排序;…;当关键字 n-1 相同时按关键字 n 进行排序。对于多关键字排序,我们只需要在比较操作时同时考虑多个关键字即可。
#include <iostream>
#include "Object.h"

using namespace std;
using namespace DTLib;

struct Test : public Object
{
    int key1;
    int key2;

    Test(int k1, int k2)
    {
        key1 = k1;
        key2 = k2;
    }

    bool operator ==(const Test& t)
    {
        return (key1 == t.key1) && (key2 == t.key2);
    }

    bool operator !=(const Test& t)
    {
        return !(*this == t);
    }

    bool operator >(const Test& t)
    {
        return (key1 > t.key1) || ((key1 == t.key1) && (key2 > t.key2));
    }

    bool operator <=(const Test& t)
    {
        return !(*this > t);
    }

    bool operator <(const Test& t)
    {
        return (key1 < t.key1) || ((key1 == t.key1) && (key2 < t.key2));
    }

    bool operator >=(const Test& t)
    {
        return !(*this < t);
    }
};

int main()
{
    Test t1(3, 4);
    Test t2(3, 5);
    
    Test t3(2, 4);
    Test t4(1, 2);

    cout << "t1 < t2 : " << (t1 < t2) << endl;
    cout << "t3 > t4 : " << (t3 > t4) << endl;

    return 0;
}

在这里插入图片描述
在上面的示例中,我们看到排序中的关键操作:比较和交换

比较 是指任意两个数据元素通过比较操作确定先后次序;交换 是指数据元素之间需要交换才能得到预期结果。

那么我们在进行排序的时候怎么进行判断这个排序是优是劣呢?
1、时间性能:关键性能差异体现在比较和交换的数量;
2、辅助存储空间:为完成排序操作所需要额外的存储空间,必要时可以“空间换时间”;
3、算法的实现复杂性:过于复杂的排序法可能影响可读性和可维护性

在这里插入图片描述

#ifndef SORT_H
#define SORT_H

#include "Object.h"
namespace XiebsLib
{
class Sort : public Object
{
private:
    Sort();
    Sort(const Sort&);
    Sort& operator=(const Sort&);

    template <typename T>
    static void Swap(T& a, T& b)
    {
        T c = a;
        a = b;
        b = c;
    }
public:

};
}
#endif // SORT_H

  • 小结
    1、排序是数据元素从无序到有序的过程
    2、排序具有稳定性,是选择排序算法的因素之一
    3、比较和交换是排序的基本操作
    4、多关键字排序与单关键字排序无本质差别
    5、排序的时间性能是区分排序算法好坏的主要因素
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值