排序之冒泡排序、插入排序及希尔排序

原创 2015年07月07日 14:12:29

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]的关键字从右向左依次与有序区中记录R[j](j=i - 1, i - 2, ....,1)的关键字比较:
若R[j]的关键字大于R[i]的关键字,则将R[j]后移一个位置
若R[j]的关键字小于或等于R[i]的关键字,则查找过程结束,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的元素进行直接插入排序,然后依次缩减增量再进行排序,待整个序列中的元素基本有序(增量足够小)时,再对全体元素进行一次直接插入排序。




版权声明:本文为博主原创文章,未经博主允许不得转载。

冒泡排序、插入排序、选择排序、希尔排序、堆排序、归并排序等常用排序算法的比较

掌握好常用的排序算法,在实际的项目开发中可以节省很多的时间。每一种排序算法在执行的效率上是存在差别的,这些微小的时间差,也许在平常的联系当中感觉不到,但是涉及到数据量比较大或者是在资源比较紧张的系统中...
  • KingCat666
  • KingCat666
  • 2015年04月24日 16:49
  • 5329

各种常见的排序,冒泡排序,选择排序,插入排序,希尔排序,堆排序,快速排序,基数排序,桶排序

各种常见的排序 要开始找工作了,把以前学的各种小知识复习一遍,以下是各种常见的排序的简单实现(冒泡排序,选择排序,插入排序,希尔排序,堆排序,快速排序,基数排序,桶排序),至于原理就不写出来了,...
  • xwchao2014
  • xwchao2014
  • 2015年08月04日 16:41
  • 952

冒泡排序、选择排序、快速排序、插入排序(希尔排序)、堆排序(十大排序)

#include #include #include          void traverse_array(int,int *);     void output_array(int,...
  • sevenquan
  • sevenquan
  • 2015年12月24日 11:44
  • 826

排序算法(带完整注释)

学习排序算法时写的,采用C实现,缺陷在于没有对算法复杂度和时间运行进行分析~不过代码很用心注释乐的,欢迎指正。 //排序算法 #include #include #include int ma...
  • qq_22947477
  • qq_22947477
  • 2016年08月05日 15:32
  • 466

排序算法----冒泡排序+插入排序+选择排序+快速排序+希尔排序+堆排序+归并排序+计数排序+基数排序+桶排序(c语言)

c语言实现各种排序算法
  • zlhzlh11
  • zlhzlh11
  • 2015年10月14日 15:18
  • 1607

常见比较排序算法的实现(归并排序、快速排序、堆排序、选择排序、插入排序、希尔排序)

这篇博客主要实现一些常见的排序算法。例如: //冒泡排序 //选择排序 //简单插入排序 //折半插入排序 //希尔排序 //归并排序 //双向的快速排序 //单向的快速排序 //...
  • Chengzi_comm
  • Chengzi_comm
  • 2016年05月16日 22:27
  • 6153

排序算法之直接插入排序和希尔排序

相信许多人和我一样,排序算法看了好几遍,当时看懂了,过几天一些细节又忘记,所以现在讲排序算法做一个总结,从最基本的排序算法展开来,首先分析直接插入排序和希尔排序。 1.直接插入排序 思想:把一个数...
  • lierjin312158950
  • lierjin312158950
  • 2016年04月09日 15:55
  • 723

常用排序算法--冒泡排序及改进和插入排序时间复杂度分析

常用排序算法–冒泡排序及改进和插入排序时间复杂度分析 常用排序算法冒泡排序及改进和插入排序时间复杂度分析 排序及常见排序算法 插入排序时间复杂度分析 冒泡排序 冒泡排序的改进 ...
  • u014532901
  • u014532901
  • 2016年09月23日 19:27
  • 998

冒泡排序-插入排序-快速排序-选择排序---飞天博客

请看文章: 排序经典集合:插入排序,冒泡排序,快速排序,选择排序,代码简单请看下面的基本介绍和代码 插入排序:直接插入排序是一种最简单的排序方法,它的基本操作是将一个记录插入到一排好序的有序表中   ...
  • xh199110
  • xh199110
  • 2014年09月29日 17:37
  • 1663

插入排序/希尔排序/快速排序C语言实现

#include #include #include void swap(int *a,int *b) { int tmp=*a; *a=*b; *b=tmp; } void insertS...
  • ZYH920521
  • ZYH920521
  • 2015年06月16日 16:28
  • 486
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:排序之冒泡排序、插入排序及希尔排序
举报原因:
原因补充:

(最多只允许输入30个字)