排序
稳定的排序
冒泡排序(bubble sort)— O(n2)
(无序区,有序区)。
從无序区透過交換找出最大元素放到有序区前端。
插入排序(insertion sort)—O(n2)
(有序区,无序区)。
把无序区的第一个元素插入到有序区的合适的位置。对数组:比较得少,换得多。
不稳定的排序
快速排序(quick sort)—O(n log n)期望時間,O(n2)最壞情況;對於大的、亂數串列一般相信是最快的已知排序
(小数,枢纽元,大数)。
选择排序(selection sort)—O(n2)
(有序区,无序区)。
在无序区里找一个最小的元素跟在有序区的后面。对数组:比较得多,换得少。
不实用的排序
递归
写递归函数有三步:
①写出迭代公式;
②确定递归终止条件;
③将①②翻译成代码。
斐波那契数列
从文字上说,费波那西数列由0和1开始,之后的费波那西系数就由之前的两数相加,数列形式如下:
0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584, 4181, 6765, 10946,………………
阶乘
全排列
队列
栈
二叉树(用递归的思想去看)
先序遍历:根节点->左子树->右子树
中序遍历:左子树->根节点->右子树
后序遍历:左子树->右子树->根节点
时间复杂度
公式
1+2+3+...+n)=n(n+1)/2
不使用中间变量交换两个数(时间换空间,空间换时间的典型案例,迭代和递归也是这种案例)
public static void swap1(Num num)
{
num.a = num.a + num.b;
num.b = num.a - num.b;
num.a = num.a - num.b;
}
稳定的排序
冒泡排序(bubble sort)— O(n2)
(无序区,有序区)。
從无序区透過交換找出最大元素放到有序区前端。
插入排序(insertion sort)—O(n2)
(有序区,无序区)。
把无序区的第一个元素插入到有序区的合适的位置。对数组:比较得少,换得多。
不稳定的排序
快速排序(quick sort)—O(n log n)期望時間,O(n2)最壞情況;對於大的、亂數串列一般相信是最快的已知排序
(小数,枢纽元,大数)。
选择排序(selection sort)—O(n2)
(有序区,无序区)。
在无序区里找一个最小的元素跟在有序区的后面。对数组:比较得多,换得少。
不实用的排序
递归
写递归函数有三步:
①写出迭代公式;
②确定递归终止条件;
③将①②翻译成代码。
斐波那契数列
从文字上说,费波那西数列由0和1开始,之后的费波那西系数就由之前的两数相加,数列形式如下:
0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584, 4181, 6765, 10946,………………
阶乘
全排列
队列
栈
二叉树(用递归的思想去看)
先序遍历:根节点->左子树->右子树
中序遍历:左子树->根节点->右子树
后序遍历:左子树->右子树->根节点
时间复杂度
公式
1+2+3+...+n)=n(n+1)/2
不使用中间变量交换两个数(时间换空间,空间换时间的典型案例,迭代和递归也是这种案例)
public static void swap1(Num num)
{
num.a = num.a + num.b;
num.b = num.a - num.b;
num.a = num.a - num.b;
}