// // Created by TYP on 2023/9/2. // #ifndef COMPRE_CALGORITHM_H #define COMPRE_CALGORITHM_H #include 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