简单插入排序的基本思想:对于原待排序记录中的第i(1<=i<=n-1)个元素Ki,保证其前面的i个元素已经是有序的,要在这前i个元素(K0--Ki-1)中找到合适的位置将第i个元素插入,具体的方法是:将Ki与Ki-1,Ki-2,.....,K0比较,找到应该插入的位置,从该位置到第i-1个位置的元素后移哟个位置,将空出的位置插入Ki。

实例:待排序整形关键字序列为0   9   8   7   4   3   2   1   6   5   ,直接排序过程如下:

第一趟(i = 1 ):[0]  9   8   7   4   3   2   1   6   5

第二趟(i = 2 ):[0   9]  8   7   4   3   2   1   6   5

第三趟(i = 3 ):[0  8   9]   7   4   3   2   1   6   5

第四趟(i = 4 ):[0  7   8   9]   4   3   2   1   6   5

第五趟(i = 5 ):[0  4   7   8   9]   3   2   1   6   5

  第六趟(i = 6): [0   3   4   7   8   9]  2   1   6   5

第七趟(i = 7): [0   2   3   4   7   8   9]  1   6   5

  第八趟(i = 8): [0   1   2   3   4   7   8   9]  6   5

第九趟(i = 9): [0   1   2   3   4   6   7   8   9]  5

  第十趟(i = 10) :  [0   1   2   3   4   5   6  7   8   9]

大功告成;

具体实现算法:

template <class T>
void insert_sort(T array[],int n)
{
   int i,j;
   for(i = 1;i<n;i++)
   {
      T temp = array[i];
      for(j = i-1;j >= 0;j --)
      {
          if(temp<array[j])
          {
              array[j+1] = array[j];
          }
          else break;
      }
      array[j+1] = temp;
   }  

其时间复杂度为O(n^2)量级;为稳定的排序算法。


排序算法review<1>--直接插入排序的更多相关文章

  1. 排序算法三:Shell插入排序

    排序算法三:Shell插入排序 声明:引用请注明出处http://blog.csdn.net/lg1259156776/ 引言 在我的博文<"主宰世界"的10种算法短评> ...

  2. 排序算法review<2>--Shell 排序

    shell排序方法也是一种插入排序算法,于1959年由D.L.Shell提出,其基本方法是:首先将带排序文件分为d1(d1<n)组,将所有彼此之间间隔为d和d的倍数的记录放在一组中,然后在组内进 ...

  3. 内部排序算法(交换排序,插入排序)注意点(C语言实现)

    对于算法思想的理解可以参考下面的这个帖子,十大经典排序算法(动图演示) - 一像素 - 博客园,因为算法的逻辑和数学很像,相应的基础资料一般也能在网上找到,所以,本帖子这谈论一些重要的注意点,其他人讲 ...

  4. Java 常用排序算法实现--快速排序、插入排序、选择、冒泡

      public class ArrayOperation {    //二分查找算法    public static int branchSearch(int[] array, int searc ...

  5. 排序算法<No.6>【插入排序】

    算法,我在路上,将自己了解的算法内容全部梳理一遍! 今天介绍简单点的,插入排序. 首先,什么是插入排序,这个维基百科上有.个人的理解,就是将一个数插入到一个已经排好序的数列当中某个合适的位置,使得增加 ...

  6. python实现排序算法(一)——插入排序算法

    ''' 插入排序算法 原始数据data 排序数据后数据SortedData,默认是从小打大排序 1.从data第一个元素开始,该元素赋值给SortedData[0],可以认为SortedData已经被 ...

  7. 【Java】 大话数据结构(18) 排序算法(5) (直接插入排序)

    本文根据<大话数据结构>一书,实现了Java版的直接插入排序. 更多:数据结构与算法合集 基本概念 直接插入排序思路:类似扑克牌的排序过程,从左到右依次遍历,如果遇到一个数小于前一个数,则 ...

  8. Java排序算法(三):直接插入排序

    [基本思想] 关键:在前面已经排好序的序列中找到合适的插入位置 步骤: 1. 从第一个元素開始,该元素能够觉得已经排好序. 2. 取出下一个元素.在已经排好序的元素序列中从后往前扫描进行比較. 3. ...

  9. 矿Java开发学习之旅------&gt;Java排序算法经典的二分法插入排序

    一.折半插入排序(二分插入排序) 将直接插入排序中寻找A[i]的插入位置的方法改为採用折半比較,就可以得到折半插入排序算法.在处理A[i]时,A[0]--A[i-1]已经按关键码值排好序.所谓折半比較 ...

随机推荐

  1. Eclipse报Caused by: java.lang.OutOfMemoryError: PermGen space解决思路

    一.修改tomcat/bin目录下的catalina.bat 在“rem ----- Execute The Requested Command ----------------------”下加入 ...

  2. Adroid—— DVM

     Android DVM   Android 运行环境主要指的虚拟机技术——Dalvik.Android中的所有Java程序都是运行在Dalvik VM上的.Android上的每个程序都有自己的线程, ...

  3. cs108 03 ( 调试, java通用性)

    Debuger Great questions These questions will solve most bugs: what method shows the symptom ? what l ...

  4. java基础知识小小结

    java基础知识小总结 在一个独立的原始程序里,只能有一个 public 类,却可以有许多 non-public 类.此外,若是在一个 Java 程序中没有一个类是 public,那么该 Java 程 ...

  5. 程序生成word与PDF文档的方法(python)

    程序导出word文档的方法 将web/html内容导出为world文档,再java中有很多解决方案,比如使用Jacob.Apache POI.Java2Word.iText等各种方式,以及使用free ...

  6. Linux系统下修改MySQL密码(忘记密码)

    忘记原来的myql的root的密码: 首先,你必须要有操作系统的root权限了.要是连系统的root权限都没有的话,先考虑root系统再走下面的步骤.类似于安全模式登录系统,有人建议说是pkill m ...

  7. 在Sql2000 sql2005 sql2008 下已能实现事务复制的强制订阅,但请求订阅始终不能实现总有下列错误提示

    硬件环境 : 一台服务器 安装了 sqlserver2008 数据库 局域网还有一台机器 安装了 sqlserver2000数据库 两台server 通信 共享均没有问题 同步过程中遇到的问题  : ...

  8. 通过Servlet获取初始化参数

    获取初始化参数在web.xml中配置Servlet时,可以配置一些初始化参数.而在Servlet中可以通过ServletConfig接口提供的方法来获取这些参数.(其实还可以通过ServletCont ...

  9. phpcms v9表单实现问答咨询功能

    本文转自别人 phpcms v9的留言板插件可以安装留言板,做问答咨询,那样的话有很多东西需要修改,也有人发现phpcms v9有个表单向导功能,只能留言,不能回复,今天仿站网:新源网络工作室告诉大家 ...

  10. ios 如何改变UISegmentedControl文本的字体大小?

    UIFont *Boldfont = [UIFont boldSystemFontOfSize:16.0f]; NSDictionary *attributes = [NSDictionary dic ...