排序(1)插入排序及交换排序
来源:互联网 发布:人脸识别算法 源代码 编辑:程序博客网 时间:2024/05/24 07:18
一、排序
1) 插入排序
a. 直接插入排序,顺序从小下标开始执行,向前比较插入到合适的位置,然后后面的值依次向后移动。
时间效率(时间复杂度):O(n2)
空间效率:O(1)
平均移动次数:n2/4
稳定(相同的值排序后相对位置不会改变)
b. 折半插入排序
改进a中比较过程,比较时候实施二分法比较,提高效率。依旧是从小下标开始顺序作为待比较和插入的数。
时间效率(时间复杂度):O(n2)
空间效率:O(1)
稳定
c. 希尔插入排序
设置“步长”的比较。将规定步长连接起来的数进行排序,按序写入参与排序数的位置。一般取5,3,1三个步长进行三趟排序。
时间效率(时间复杂度):O(n1.25)~ O(1.6n1.25)经验值
空间效率:O(1)
平均移动次数:n2/4
不稳定(相同的值排序后相对位置会改变)
2) 交换排序
a. 冒泡排序:相邻两数交换,编程时两层for循环,外层为for(int i = 0; i<length;i++),内层为for(int j = 0; j <length - i;i++)
void Bubble_Sort (SqList &L)
{ /*对排序表R[1]..R[n]进行冒泡排序,n是记录个数*/
int swap; /*交换标志变量,这个变量可以在某些情况下减少比较此时*/
for(i=1; i<L.length; i++)
{swap=0;
for(j=1; j<=L.lengthi; j++)
if (L.r[j].key>L.r[j+1].key)
{L.r[0]=L.r [j];
L.r [j]=L.r [j+1];
L.r [j+1]=L.r [0];
swap=1; /*置交换标志*/
}
if(swap==0) break;
}
}
时间效率:O(n2)
空间效率:O(1)
不稳定(相同的值排序后相对位置会改变)
b. 快速排序
选择枢轴(一般为数列的第一个值),游标A从最大下标值开始逆序比较找到小于枢轴的值放到枢轴位置(也就是第一个位置),接着游标B从最小下标顺序比较找到比枢轴大的第一个值放到上一个移动的值的位置,接着在从游标A继续逆序找小于枢轴的值…….直到游标A与游标B相遇,将枢轴值放入相遇的位置。该趟排序结束。
时间效率:O(nlog2n)
空间效率:O(log2n)
不稳定(相同的值排序后相对位置会改变)
- 排序(1)插入排序及交换排序
- 排序(1)--插入排序和交换排序
- 交换排序、插入排序
- 交换排序与插入排序
- 插入排序与交换排序
- 冒泡排序、插入排序、交换排序
- 内部排序(一)------插入排序、交换排序
- 选择排序,冒泡排序,插入排序,交换排序,shell排序
- 排序 : 1 交换排序
- 排序 : 1 交换排序
- 排序算法整理(C++):插入排序、交换排序、选择排序、归并排序
- 排序基础--(插入排序、交换排序、选择排序、归并排序)
- 交换类排序(冒泡排序及快速排序)
- 排序:插入排序/选择排序/交换排序(冒泡法)
- 插入排序、交换排序、选择排序、归并排序、基数排序
- 插入排序/选择排序/交换排序/归并排序/基数排序
- C++排序方法:插入排序、交换排序、选择排序
- 插入排序、选择排序、交换排序和归并排序
- Runtime.getRuntime().exec() 输出流阻塞问题
- 元数据(Metadata)
- 刘兰芳评书app下载
- 进程调度-进程切换前后的动作
- 接口测试浅谈
- 排序(1)插入排序及交换排序
- 爬虫实战之一--python3及pip安装
- POj 2253 Frogger(变相最短路)
- oraclecode常用语句大全
- 关于zookeeper集群的配置问题
- HDU 5137 How Many Maos Does the Guanxi Worth(枚举+最短路径)
- HDU-1950 Bridging signals (nlogn求LIS)
- 告别Dagger2模板代码:DaggerAndroid原理解析
- 验证RA8875的硬件绘图与使用MCU软件绘图的速度差异