排序算法review<1>--直接插入排序
简单插入排序的基本思想:对于原待排序记录中的第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 = 7): [0 2 3 4 7 8 9] 1 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>--直接插入排序的更多相关文章
- 排序算法三:Shell插入排序
排序算法三:Shell插入排序 声明:引用请注明出处http://blog.csdn.net/lg1259156776/ 引言 在我的博文<"主宰世界"的10种算法短评> ...
- 排序算法review<2>--Shell 排序
shell排序方法也是一种插入排序算法,于1959年由D.L.Shell提出,其基本方法是:首先将带排序文件分为d1(d1<n)组,将所有彼此之间间隔为d和d的倍数的记录放在一组中,然后在组内进 ...
- 内部排序算法(交换排序,插入排序)注意点(C语言实现)
对于算法思想的理解可以参考下面的这个帖子,十大经典排序算法(动图演示) - 一像素 - 博客园,因为算法的逻辑和数学很像,相应的基础资料一般也能在网上找到,所以,本帖子这谈论一些重要的注意点,其他人讲 ...
- Java 常用排序算法实现--快速排序、插入排序、选择、冒泡
public class ArrayOperation { //二分查找算法 public static int branchSearch(int[] array, int searc ...
- 排序算法<No.6>【插入排序】
算法,我在路上,将自己了解的算法内容全部梳理一遍! 今天介绍简单点的,插入排序. 首先,什么是插入排序,这个维基百科上有.个人的理解,就是将一个数插入到一个已经排好序的数列当中某个合适的位置,使得增加 ...
- python实现排序算法(一)——插入排序算法
''' 插入排序算法 原始数据data 排序数据后数据SortedData,默认是从小打大排序 1.从data第一个元素开始,该元素赋值给SortedData[0],可以认为SortedData已经被 ...
- 【Java】 大话数据结构(18) 排序算法(5) (直接插入排序)
本文根据<大话数据结构>一书,实现了Java版的直接插入排序. 更多:数据结构与算法合集 基本概念 直接插入排序思路:类似扑克牌的排序过程,从左到右依次遍历,如果遇到一个数小于前一个数,则 ...
- Java排序算法(三):直接插入排序
[基本思想] 关键:在前面已经排好序的序列中找到合适的插入位置 步骤: 1. 从第一个元素開始,该元素能够觉得已经排好序. 2. 取出下一个元素.在已经排好序的元素序列中从后往前扫描进行比較. 3. ...
- 矿Java开发学习之旅------>Java排序算法经典的二分法插入排序
一.折半插入排序(二分插入排序) 将直接插入排序中寻找A[i]的插入位置的方法改为採用折半比較,就可以得到折半插入排序算法.在处理A[i]时,A[0]--A[i-1]已经按关键码值排好序.所谓折半比較 ...
随机推荐
- linux - camera capture
//cut a picture#include <stdio.h>#include <stdlib.h>#include <string.h>#include &l ...
- gt811 driver
#include <linux/module.h> #include <linux/i2c.h> #include <linux/platform_device.h> ...
- 微信小程序 - WapRequest.js
文件位于 utils/WapRequest.js 封装了所有接口请求和wap站点的controller请求,代码示例 /** * 选择 洲 国家 * 无参数 */ WapRequest.prototy ...
- SQL on Hadoop 的真相(2)
转自:http://blog.jobbole.com/87159/ 这是一组系列博客,目的是详尽介绍 SQL-on-Hadoop .该系列的第一篇会介绍一些存储引擎和在线事务处理(简称 OLTP )相 ...
- Linux系统下如何查看物理内存占用率
Linux系统下如何查看物理内存占用率 Linux下看内存和CPU使用率一般都用top命令,但是实际在用的时候,用top查看出来的内存占用率都非常高,如:Mem: 4086496k total, ...
- 关于js中遍历总结
1.for循环 var arr = []; for (var i = 0; i < arr.length; i++) { if (条件1) return; if (条件2) break; if ...
- Nginx配置里的fastcgi_index和index
在配置nginx时有时会遇到, 所以记录一下 location ^~ /wechat/ { index index.php; fastcgi_pass 127.0.0.1:9000; fastcgi_ ...
- 在线制作logo
logoko:http://www.logoko.com.cn/ markmarker:http://emblemmatic.org/markmaker/#/ logomaker:https://lo ...
- 时序数据库技术体系 – InfluxDB TSM存储引擎之TSMFile
本文转自 http://hbasefly.com/2018/01/13/timeseries-database-4/ 为了更加系统的对时序数据库技术进行全方位解读,笔者打算再写一个系列专题(嘿嘿,好像 ...
- 修复吾爱OD数据窗口双击不出现偏移问题
吾爱破解专用版OD其实一直有一个小BUG,就是双击数据窗口不出现下图的偏移:<ignore_js_op> 我一直苦苦寻找解决办法,曾见小生怕怕在另一个贴说这是看雪那边OD改了什么东西引起的 ...