comprecpp/cppbase/algorithm/CAlgorithm.h
2024-03-08 15:25:16 +08:00

119 lines
3.6 KiB
C++

//
// Created by TYP on 2023/9/2.
//
#ifndef COMPRE_CALGORITHM_H
#define COMPRE_CALGORITHM_H
#include <cstdio>
void PrintArrayInt(const int array[], int nCnt)
{
if (nCnt < 1)
return ;
for (int i = 0; i < nCnt; ++i)
std::printf("%d ", array[i]);
printf("\n");
}
class CAlgorithm {
public:
CAlgorithm() = default;
~CAlgorithm() = default;
public:
/*
* 《1.直接选择排序》
*
* 直接选择排序又称简单选择排序,是一种`不稳定的`排序方法。
* 时间复杂度:O(n^2)
* 空间复杂度:O(1)
* 其基本思想是:第 i 趟排序在待排序序列 a[i]~a[n] 中选取关键码最小的记录,
* 并和第 i 个记录交换作为有序序列的第 i 个记录。
* 相当于是认为左侧有序,右侧无序。
*
* https://blog.csdn.net/u011815404/article/details/79256237
*/
static void SortDirectSelectMethod(int array[], int nSize);
/*
* 《2.快速排序(快排)》
*
* 快速排序是一种不稳定的排序方法。
* 时间复杂度:最坏情况下,时间复杂度是O(n^2),最优情况下,时间复杂度是O(nlogn);平均时间复杂度是O(nlogn);
* 空间复杂度:O(logn)
* 简单总结三步:
* 第一步,从后往前找比基准小的数据,往前挪
* 第二步,从前往后找比基准大的数据,往后挪
* 第三步,重复第一步和第二步
*
* https://blog.csdn.net/weixin_61453872/article/details/121481223
*/
static void SortQuickMethod(int array[], int nStartIndex, int nEndIndex);
/*
* 《3.冒泡排序(起泡排序)》
*
* 冒泡排序是一种稳定的排序方法。
* 时间复杂度:O(n^2)
* 空间复杂度:O(1)
* 两两比较,大(小)的换到后面。
*
*/
static void SortBubbleMethord(int array[], int nSize);
/*
* 《4.归并排序》
*
* 归并排序是一种稳定的排序方法。
* 以空间换时间。算法中需要来回复制结果数组和原序列,很耗时,所以归并排序一般用于外排序
* 时间复杂度:O(nlogn)
* 空间复杂度:o(n)
* 思路见 img/归并排序思路图.png 图片
*/
/*
* 《5.直接插入排序》
*
* 直接插入排序是一种稳定的的排序方法。
* 时间复杂度:O(n^2)
* 空间复杂度:O(1)
*/
/*
* 《6.希尔排序》
*
* 希尔排序是一种不稳定的排序方法。本质还是直接插入排序,添加了步长。
* 时间复杂度:O(n^(1.3—2))
* 空间复杂度:O(1)
* 思路见 img/希尔排序思路图.jpeg 图片
*/
/*
* 《7.堆排序》
*
* 堆排序是一种不稳定的排序方法。由于初始构建堆所需的比较次数较多,所以不适合待排序序列个数较少的情况。
* 时间复杂度:O(nlogn)
* 空间复杂度:O(1)
*/
/*
* 《8.直接选择排序》
*
* 直接选择排序是一种不稳定的排序方法。
* 时间复杂度:O(n^2)
* 空间复杂度:O(1)
* 说白了就是:直接找最小(大)的放前面,剩下的继续找最小(大)的放第二个,类推...
*/
};
// 直接排序测试
void SortDirectSelectMethodTest();
// 快速排序测试
void SortQuickMethodTest();
// 冒泡排序测试
void SortBubbleMethordTest();
#endif //COMPRE_CALGORITHM_H