插入排序和合并排序
来源:互联网 发布:淘宝嗅觉系是真的吗 编辑:程序博客网 时间:2024/05/16 00:39
自己的算法确实是蒟蒻无比,只好抽时间再来回顾一下。
1. 插入排序:
输入:数组A; 输出:排序后的A
for i=1 to len(A)-1
temp = A[i];
//对第 i(i>=0) 个元素,其前i-1个元素以及排序完毕;
//寻找第 i 元素的位置,并且挪动那些应该后移的
for j= i-1 to 0 && A[j] > temp:
A[j+1] = A[j];
j - -;
// j+1 位置就是 temp的坑了
A[j+1] = temp
插入排序比较简单,复杂度两套循环O(n2)
2. 合并排序:
分而治之的思想,先把大的分成小的,然后再合并结果。
输入:数组A; 输出:排序后的A
Merge-sort(A, s, e):
if s==e: return; // 已经只有一个元素了,数组直接返回,结束条件
m = (s+e)/2; //取中点
Merge-sort(A, s, m); //前半部分
Merge-sort(A, m+1, e); //处理后半部分
Merge(A, s, e); //合并结果
Merge(A, s, e):
m=(s+e)/2;
L = A[s:m]
R = A[m+1:e]
L[last] = R[last] = max(A) +1 or other
for k=s to e:
if L[i] < R[j]: A[k]=L[i]; i++; //因为此处,可以将LR的最后元素设为一个默认达不到的max,k转到e时循环结束
else: A[k]=R[j]; j++;
合并排序二分处理,每次只处理当前一半,约为lg(n),总的时间复杂度为O(n*lg(n))
- 插入排序和合并排序
- 扑克牌类比插入排序和合并排序
- 算法导论 插入排序和合并排序
- 对N个随机数的插入排序和合并排序
- Java实现快速排序和合并排序
- 用javascript比较快速排序和合并排序的优劣
- 插入并排序数组
- 插入并排序
- 排序并插入
- 排序并插入
- 对两个链表的排序和合并
- C语言链表的创建,排序和合并
- R语言数据的排序和合并--ordered();rbind()
- 排序 插入排序,冒泡排序,选择排序,并归排序
- 排序并插入/常见的排序算法
- 快速排序和合并排序的比较(时间和比较步数)
- 插入排序-【插入排序】
- 排序算法-->选择排序,插入排序,并归排序,快速排序
- 我心目中的编程高手
- JVM学习之:虚拟机中的运行时栈帧总结(二)
- 公司绝不会告诉你的20大秘密 值得一看很受用
- linux GDB调试技术
- 多核计算与程序设计 - 05 基本算法和数据结构 之二 多线程链表
- 插入排序和合并排序
- 阻塞非阻塞socket
- 物化视图应用
- mail qmail ezmlm
- 2.静态,单例,继承!
- 求助sizeof类,多重继承,混合继承
- c#在类型系统世界的位置
- 第四章---查找
- C语言面试题