博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
排序算法
阅读量:5244 次
发布时间:2019-06-14

本文共 1505 字,大约阅读时间需要 5 分钟。

算法 最坏情况 平均情况/期望运行时间
Θ(n^2) Θ(n^2)
Θ(nlg(n)) Θ(nlg(n))
O(nlg(n))
Θ(n^2) Θ(nlg(n))(期望)
Θ(k+n) Θ(k+n)
Θ(d(k+n)) Θ(d(k+n))
Θ(n^2) Θ(n)(平均情况)

插入排序

将当前值插入到已经排好的序列中。最好的情况下是n,最差情况下是n^2。属于原址排序。

static void InsertSort(List
sq){ for (int j = 1; j < sq.Count; j++) { var current = sq[j]; int i = j - 1; //如果当前值大的话,不用移动,小的话,移动比他小的值 while (i >= 0 && sq[i] > current) { sq[i + 1] = sq[i]; i--; } sq[i + 1] = current; }}

归并排序

总代价总是为nlg(n)。非原址排序。

static void Merge_Sort(List
sq, int s, int e){ if (s < e) { int q = (s + e) / 2; //分治 Merge_Sort(sq, s, q); Merge_Sort(sq, q+1, e); //合并 Merge(sq, s, q, e); }}static void Merge(List
sq, int s, int m, int e){ List
sequenceL = new List
(); //拷贝分支 for (int i = s; i <= m; i++) sequenceL.Add(sq[i]); List
sequenceR = new List
(); for (int i = m+1; i <= e; i++) sequenceR.Add(sq[i]); //归并 int li = 0, ri = 0; for (int k = s; k <= e; k++) { //另外一个分支合并完成的情况 if (li >= sequenceL.Count) { sq[k] = sequenceR[ri]; ri++; continue; } if (ri >= sequenceR.Count) { sq[k] = sequenceL[li]; li++; continue; } //比较两个分支的当前元素 if (sequenceL[li] < sequenceR[ri]) { sq[k] = sequenceL[li]; li++; } else { sq[k] = sequenceR[ri]; ri++; } }}

 

转载于:https://www.cnblogs.com/qiusuo/p/5210990.html

你可能感兴趣的文章
NOIP2015 运输计划 树上差分+树剖
查看>>
P3950 部落冲突 树链剖分
查看>>
读书汇总贴
查看>>
微信小程序 movable-view组件应用:可拖动悬浮框_返回首页
查看>>
MPT树详解
查看>>
空间分析开源库GEOS
查看>>
RQNOJ八月赛
查看>>
前端各种mate积累
查看>>
jQuery 1.7 发布了
查看>>
Python(软件目录结构规范)
查看>>
Windows多线程入门のCreateThread与_beginthreadex本质区别(转)
查看>>
Nginx配置文件(nginx.conf)配置详解1
查看>>
linux php编译安装
查看>>
name phone email正则表达式
查看>>
「Unity」委托 将方法作为参数传递
查看>>
重置GNOME-TERMINAL
查看>>
redis哨兵集群、docker入门
查看>>
hihoCoder 1233 : Boxes(盒子)
查看>>
oracle中anyData数据类型的使用实例
查看>>
C++对vector里面的元素排序及取任意重叠区间
查看>>