博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
排序之冒泡排序、插入排序及希尔排序
阅读量:5270 次
发布时间:2019-06-14

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

1、冒泡排序

基本思想:对于每一趟的排序,从第一个数開始。依次比較前一个数与后一个数的大小。
假设前一个数比后一个数大。则进行交换。这样一轮过后,最大的数将会出如今最末位的位置。
第二轮则去掉最后一个数,对前n-1个数再依照上面的步骤找出最大数。该数将出如今倒数第二的位置。
n-1轮过后。就完毕了排序。

,举例:冒泡排序1,5。2。3。9,8,6,
第一趟:,1<5,不换,5>2。交换1 2 5,3, 9 8,6
5>3交换。
1 2 3 5 9 8,6
5<9不换,9>8交换,
1 2 3 5 8 9,6。9>6交换。1 2 3 5 8 6 9         9的位置固定
第二趟:1<2不换。2<3不换。3<5不换,5<8不换。8>6交换1 2 3 5 6 8 9    8的位置固定
依次迭代
 N个数最坏情况下比較次数:1+2+......+N-1

2、插入排序

基本思想:将待插入记录R[i]的keyword从右向左依次与有序区中记录R[j](j=i - 1, i - 2, ....,1)的keyword比較:
若R[j]的keyword大于R[i]的keyword,则将R[j]后移一个位置
若R[j]的keyword小于或等于R[i]的keyword,则查找过程结束,j + 1即为R[i]插入位置
举例:插入排序:34,8,64,51,32,21
如果一開始有数字:34    8<34       8 34
64>34          8 34 64
51<64 51>34    8 34 51 64
32<64 32<51 32<34  32>8    8 32 34 51 64
21<64 21<51 21<34 21<32 21>8       8 21 32 34 51 64    
插入和冒泡。每次交换2个相邻元素时,正好消去1个逆序对。

(下表i<j,假设A[i]>A[j]则称(i,j)为一对逆序对)

假设序列基本有序,则插入排序简单且高效。
随意N个不同元素组成的序列平均具有N(N-1)/4个逆序对
不论什么仅以交换相邻元素来排序的算法。其平均时间复杂度为欧美阁(N*N)

3、希尔排序

克服了前两种排序每次仅仅交换相邻元素来排序的问题。
基本思想:先将整个待排元素序列切割成若干个子序列(由相隔某个“增量D”的元素组成的),分别对相隔D的元素进行直接插入排序,然后依次缩减增量再进行排序,待整个序列中的元素基本有序(增量足够小)时。再对全体元素进行一次直接插入排序。

转载于:https://www.cnblogs.com/jhcelue/p/6742142.html

你可能感兴趣的文章
第四周作业_2013551605
查看>>
爱奇艺笔试题
查看>>
HTML5和CSS3的新特性
查看>>
C# HttpHelper 采集
查看>>
JSON转Map
查看>>
ios 下锁使用
查看>>
用grunt搭建自动化的web前端开发环境-完整教程
查看>>
今天开始正式学前端
查看>>
bzoj 3540: [Usaco2014 Open]Fair Photography
查看>>
Android spinner默认样式不支持换行和修改字体样式的解决方法
查看>>
ajax标准格式
查看>>
高薪技术
查看>>
bootstrap collapse 无法收回
查看>>
GuessNumber
查看>>
IDL软件初步了解
查看>>
《高性能SQL调优精要与案例解析》一书谈主流关系库SQL调优(SQL TUNING或SQL优化)核心机制之——索引(index)...
查看>>
【DP】Big Barn 巨大的牛棚
查看>>
private与final修饰方法的区别(转)
查看>>
POJ3154 Graveyard
查看>>
VS .sln .csproj 文件的右键编译
查看>>