![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构/算法
汝南张公子
通信小白努力中!!!
展开
-
排序--(单向)冒泡排序
基本原理(升序):对于给定的N个数据,从第一个数据开始依次对相邻的两个数据进行比较,数据大于后面时,交据位置,进行一轮比较和位置交换后,最大的数将位于第N 位;再对前(N-1)个数据进行比较和位置交换;重复该过程直至比较的数据只剩下最后一个。复杂度:平均时间复杂度为O(N^2)代码实现(C语言)void BubbleSort(int *a, int n) { int i , j; i原创 2017-02-16 20:38:08 · 273 阅读 · 0 评论 -
排序--归并排序
基本原理:利用递归和分治的思想。原理见下图: 利用归并排序,对数组[10 4 6 3 8 2 5 7]进行排序(升序)。 复杂度分析:分割的次数为logN,共有N个数,时间复杂度为(N*logN)。 代码实现-C语言。原创 2017-02-17 22:53:48 · 248 阅读 · 0 评论 -
常用排序算法的复杂度总结
常用排序算法的复杂度归纳:原创 2017-02-15 20:48:15 · 259 阅读 · 0 评论 -
排序——插入排序
插入排序(升序): 基本原理: 对于给定的一组数据,假定第一个数据自成一个有序序列,其余的均为无序序列。从第二个数据开始,按照数据的大小依次将当前数据插入到之前的有序序列中,直至到最后一个数据插入完成。 算法复杂度: 在最坏情况下,数组完全逆序,插入第2个元素时要考察前1个元素,插入第3个元素时,要考虑前2个元素,……,插入第N个元素,要考虑前 N - 1 个元素。因此,最坏情况下的比较次原创 2017-02-15 20:51:19 · 193 阅读 · 0 评论 -
动态规划(DP)之最长上升子序列问题
C++实现动态规划(DP)之最长上升子序列问题 问: 输入n个正整数,求其最大上升子序列的数值 #include #include #include using namespace std int main() { int n; cin >> n;原创 2017-02-13 22:27:38 · 310 阅读 · 0 评论 -
排序——选择排序
选择排序-- 基本原理:(升序)对数据进行遍历,找出最小的数与第一个数进行位置交换;接着从第二个数开始进行遍历,从中再找出最小的数与第二个数进行位置交换;重复该过程,直至只剩下一个数为止。 算法分析:交换移动数据次数少,每趟的比较次数相同,第i趟的排序的次数为(n-i)次; 交换次数为0~n-1(有序~逆序)。最终的排序时间是比较与交换的次数,算法的时间复杂度为O(n*n)。原创 2017-02-14 14:51:25 · 257 阅读 · 0 评论