基础算法--排序: 之插入排序
来源:互联网 发布:隐蔽战线知乎 编辑:程序博客网 时间:2024/06/05 05:58
冒泡排序两两比较指的是: 未排序的相邻元素之间的两两比较,对于已排好的元素,它不再访问。
而插入排序中的比较则是: 在未排序的元素中,取出一个,将它与已排好的元素进行比较,从而确定其位置。
是某未排元素,与诸多已排元素的逐次比较。
其排序图解如下:
程序代码:
1) 比较一次 , 移动一次
- //比较一次,移动一次
- void StraightInsertionSort(int *p,int n)
- {
- int i,j,t;
- for (i=1;i<n;i++) // 0...i-1 是已排好元素 i...n-1是未排元素
- {
- t=p[i]; // 记录下 将要与排好序的元素 进行比较的那个 未排序元素
- for (j=i-1;j>=0;j--)
- {
- if (t<p[j]) // 比较一次, 移动一次
- {
- p[j+1]=p[j];
- p[j]=t;
- }else{
- break; // 已经将t 存放到目标位置
- }
- }
- }
- }
2) 先找到合适位置,再集体移动
- // 先找位置 再集体移动
- void StraightInsertionSort(int *p,int n)
- {
- int i,j,t;
- for (i=1;i<n;i++) // 0...i-1 是已排好元素 i...n-1是未排元素
- {
- t=p[i]; // 记录下 将要与排好序的元素 进行比较的那个 未排序元素
- // 找t所应在的位置
- for (j=i-1;j>=0;j--)
- {
- if (t>=p[j]) // 说明t应该放在j+1 位置上
- break;
- }
- for (int k=i-1;k>j;k--)
- {
- p[k+1]=p[k];
- }
- p[j+1]=t;
- }
- }
3) 对于情况2,可以用二分查找法优化程序, 如下:
- void BinaryInsertionSort(int *p, int n)
- {
- int i,j,k;
- for (i=1;i<n;i++) // 0...i-1 是已排好元素 i...n-1是未排元素
- {
- int t=p[i]; // 记录下 将要与排好序的元素 进行比较的那个 未排序元素
- int iLeft=0;
- int iRight=i-1;
- int iMiddle=(iLeft+iRight)/2;
- while (iLeft<=iRight)
- {
- if (t>p[iMiddle])
- {
- iLeft=iMiddle+1;
- }
- if (t<p[iMiddle])
- {
- iRight=iMiddle-1;
- }
- if (t==p[iMiddle])
- {
- j=iMiddle; // 0....j 不需移动 j+1...i-1 需要后移一位 t 应保存在第j+1位置
- break;
- }
- iMiddle=(iLeft+iRight)/2;
- }
- if (iLeft>iRight)
- {
- j=iLeft-1; // 0....j 不需移动 j+1...i-1 需要后移一位 t应保存在第j+1位置
- }
- for (k=i-1;k>j;k--)
- {
- p[k+1]=p[k];
- }
- p[j+1]=t;
- }
- }
0 0
- 基础算法之插入排序
- 算法基础之插入排序
- 算法基础之排序篇-插入排序
- 基础算法--排序: 之插入排序
- 基础算法之排序(3)--插入排序
- 算法基础之排序—插入排序
- 【基础算法】排序-简单排序之三(插入排序)
- 基础算法-插入排序
- 基础算法-插入排序
- 【基础算法】插入排序
- 【算法基础】插入排序
- 【基础算法】-- 插入排序
- 基础算法系列(七)排序算法之插入排序
- 算法(algorithms)基础之:插入排序
- 算法基础之----直接插入排序
- 基础算法之四--排序: 之插入排序
- 排序算法之插入排序
- 排序算法之插入排序
- C++类和对象小程序
- linux下获取程序当前目录绝对路径
- 那些职场优秀人员的共性
- $_SERVER['SERVER_SUBDOMAIN'],自定义$_SERVER变量
- TypeError: jQuery(...).validationEngine is not a function
- 基础算法--排序: 之插入排序
- vmm执行基本流程
- ZOJ 1151 Word Reversal
- solr检索乱码的问题
- JAVA之IO技术 合并文件--有bug哦
- 在Thinkpad上使用WiFi共享精灵有时会遇到无线网卡自动关闭怎么破
- tomcat+solr+IK全过程
- 验证时间格式YYYY-MM-DD
- 记录未懂知识以备未来使用