⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sort.h

📁 对结构体数据或单向链表快速排序,只为了练习,不是很合理.希望对初学者有点帮助.
💻 H
字号:
#ifndef  CSORT_H
#define  CSORT_H
  
  /***********************************************************************
   * 介    绍: 类 CSort 主要实现对任意结构体数组或简单链表的快速排序
   *
   * 说    明: 创建后调用Initalization()初始化对象时要把参数设好, 否
   *           则不能正常工作, 比较复杂, 要看这个函数的参数说明.在初
   *           始化好对象后调用SetSortKey()来设置排序的具体参数(主关
   *           键字及其他关键字和升降序).最后调用GetSorted()来获取排
   *           序结果, 直接存放在原数组或链表中.
   *
   * 输    出: 排序结果可调用GetSorted()函数, 并返回给数组或链表.
   *
   * 使用说明: 1. 用CSort来定义一个对象实例cs(只能使用一个)
   *           2. 调用InitObject(&cs)来初始化cs
   *           3. 调用cs.Initialization()方法, 设置好初始环境
   *           4. 调用cs.SetSortKey()来设置排序的关键字及类型(注意参数)
   *           5. 调用cs.GetSorted()方法进行排序, 结果存放在原数组或链表
   *           6. 调用cs.PrintInfo()可以查看排序的时间及其他信息
   *           7. 使用完后调用cs.Destroy()把实例cs销毁释放空间.
   **********************************************************************/
  typedef struct CSort
  {
    void (*Create)(void);
    void (*Destroy)(void);
    void (*InitializationArray)(void *const, int, int);
    void (*InitializationLink)(void *const, int, void **);
    int  (*GetSorted)(void);
    int  (*SetSortKey)(int, int, void *const, void *const, int, int);
    void (*PrintInfo)(void);
  }CSort;
  
  void InitObject(CSort * obj);
    
  void Create(void);
  void Destroy(void);
  
  /************************************************************************  
   * 函  数: 初始化函数 Initialization()
   * 说  明: 最重要的函数, 排序准备工作, 各个参数要设对, 不同的是最后一      
   *         个参数, 如果传的是数组地址则要设定数组元素的个数, 如果传入      
   *         的是链表则要把它的pNext地址作为参数传入,这也是唯一区分排序      
   *         容器的地方, 只能调用两者其一.(在这儿分成下面两个函数)           
   * 参  数: 1. pArray 待排序数组或链表地址                                  
   *         2. iTSize 单元元素结构体大小                                    
   *         3. iAcount 或 ppNextAddr                                        
   *            (1)iAcount 数组元素的个数  传入此参数将在这个数组内排序      
   *            (2)ppNextAddr 节点中pNext的地址  传入此参数则动态排序        
   ***********************************************************************/  
  void InitializationArray(void *const pArray, int iTSize, int iACount);
  void InitializationLink(void *const pArray, int iTSize, void **ppNextAddr);
  
  /* 获取排序结果 */
  int GetSorted(void);
  
  /************************************************************************  
   * 函  数: 参数设置函数 SetSortKey()
   * 说  明: 设置排序的关键字及排序方式
   * 参  数: 1. iOrder    排序关键字的次序 从0到9 主关键字为0, 不能间断设置
   *         2. iSortType 升序 1,  降序 -1
   *         3. pArray    待排序数组或链表地址
   *         4. pKey      关键字在第一个元素结构体中的地址
   *         5. iKeySize  这个关键字的空间大小, 整型和浮点型传入0, 字符型用
   *                      sizeof求出, 双精度型传入-1.
   *         6. iUse      这个第iOrder个关键字可用1, 不可用0
   ***********************************************************************/ 
  int SetSortKey(int iOrder, int iSortType, void *const pArray,
                 void *const pKey, int iKSize, int iUse);
  
  /* 输出排序过程的信息 */
  void PrintInfo(void);

#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -