zoukankan      html  css  js  c++  java
  • 排序——排序的基本概念

    1,排序的一般定义:

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

           2,无序到有序就是排序;

          

    2,排序的数学定义:

           1,假设含 n 个数据元素序列为{R1, R2, ..., Rn}, 其相应的关键字序列为 {K1, K2, ..., Kn},这些关键字相互之间可以进行比较,即:在它们之间存在着这样一个关系  Kp1 <= Kp2 <= ... <= Kpn,  按此固有关系将上式记录序列重新排列为  {Rp1, Rp2, ..., Rpn}的操作称为排序。

             

    3,排序的稳定性:

           1,如果在序列中有两个数据元素 r[i] 和 r[j],它们的关键字 k[i] == k[j],且在排序之前,对象 r[i] 排在 r[j] 前面;如果在排序之后,对象 r[i] 仍在对象 r[j] 的前面,则称这个排序方法是稳定的,否则称这个排序方法是不稳定的;

                 

    4,多关键字排序:

           1,排序时需要比较的关键字多于一个:

                  1,排序结果首先按关键字 1 进行排序;

                  2,当关键字 1 相同时按关键字 2 进行排序;

                  3,当关键字 n - 1 相同时按关键字 n 进行排序;

              (4),关键字之间有优先级;

                 

    5,多关键字排序是否比单关键字排序更复杂?

           1,对于多关键字排序,只需要在比较操作时同时考虑多个关键字即可;

           2,只要定义好了大小关系,就排序算法而言,多关键字排序和单关键字排序本质没有任何差异;

           3,后续课程只考虑单关键字排序;

          

    6,多关键字比较的代码实现:

           1,利用短路原则;

                 

          

    7,排序中的关键操作:

           1,比较:

                  1,任意两个数据元素通过比较操作确定先后次序;

           2,交换:

                  1,数据元素之间需要交换才能得到预期效果(无序变有序);

                 

    8,排序的审判:

           1,时间性能:

                  1,关键性能差异体现在比较和交换的数量;

           2,辅助存储空间:

                  1,为完成排序操作需要的额外的存储空间:

                         1,嵌入式开发,空间资源受限;

                  2,必要时可以“空间换时间”;

           3,算法的实现复杂性:

                  1,过于复杂的排序法可能影响可读性和可维护性;

                 

    9,DTLib 中的排序类设计:

     

           1,定义排序类,类中实现常用的各种各样排序方法,项目中直接只用类的成员函数就可以排序;

           2,排序类继承自 Object;

           3,构造函数、拷贝构造函数以及赋值操作符全部定义为私有的,排序类不可能有对象;

           4,将不同排序方法实现为类的静态成员函数来使用;

    10,小结:

           1,排序是数据元素从无序到有序的过程;

           2,排序具有稳定性,是选择排序算法的(主要)因素之一;

           3,比较和交换是排序的基本操作;

           4,多关键字排序与单关键字排序无本质区别;

                  1,比较没本质区别,所以排序也没本质区别;

           5,排序的时间性能是区分排序算法好坏的主要因素;

  • 相关阅读:
    最长回文子串 V2(Manacher算法)
    用例建模Use Case Modeling
    分析一套源代码的代码规范和风格并讨论如何改进优化代码
    结合工程实践选题调研分析同类软件产品
    如何提高程序员的键盘使用效率
    antd移动端onClick事件点击无效
    webpack打包问题
    centos下部署项目问题
    javascript return 跟 break区别
    VUE清除组件内部定时器
  • 原文地址:https://www.cnblogs.com/dishengAndziyu/p/10923866.html
Copyright © 2011-2022 走看看