插入排序

原创 2018年04月16日 23:55:52
插入排序
算法思想:将一个数组分为前后有序与无序两个部分,首先把数组的第一个元素当作一个有序序列,然后将后面的无序序列的第一个元素与有序序列的尾部元素开始依次往前比较,如果带插入的无序元素比有序序列中的元素小,则将当前做比较的有序元素往后移动一个单元,否则将待插元素插入至当前有序序列元素的后一个单元。直至将无序序列部分的元素全部插入至有序部分。

代码实现:
#include<stdio.h>

void InsertSort(int arr[], int lenth){
	int i, j, temp;
	for(i = 1; i < lenth; i++){		//外循环控制有序部分 
		temp = arr[i];				//temp 暂存为待插元素 
		j = i - 1;
		for (; j >= 0&&temp < arr[j]; j--)//从有序序列的后面依次向前比较 
			arr[j + 1] = arr[j];
		arr[j + 1] = temp;
		printf("第%2d次循环后的结果:",i);
		for(int x = 0; x < 12; x++)
			printf("%3d", arr[x]);
		printf("\n");	 
	}
}

int main(void){
	int arr[12] = {5,9,6,3,7,8,1,2,4,9,2,4};
	InsertSort(arr, 12);
	return 0;
}

输出结果:

第 1次循环后的结果:  5  9  6  3  7  8  1  2  4  9  2  4第 2次循环后的结果:  5  6  9  3  7  8  1  2  4  9  2  4第 3次循环后的结果:  3  5  6  9  7  8  1  2  4  9  2  4第 4次循环后的结果:  3  5  6  7  9  8  1  2  4  9  2  4第 5次循环后的结果:  3  5  6  7  8  9  1  2  4  9  2  4第 6次循环后的结果:  1  3  5  6  7  8  9  2  4  9  2  4第 7次循环后的结果:  1  2  3  5  6  7  8  9  4  9  2  4第 8次循环后的结果:  1  2  3  4  5  6  7  8  9  9  2  4第 9次循环后的结果:  1  2  3  4  5  6  7  8  9  9  2  4第10次循环后的结果:  1  2  2  3  4  5  6  7  8  9  9  4第11次循环后的结果:  1  2  2  3  4  4  5  6  7  8  9  9

时间复杂度为O(n^2),
稳定性: 稳定。 因为排完序后,相同元素的前后顺序与排序前相同。

插入排序算法解析与实例

1、什么是插入排序           插入排序对于少量元素的排序是一个有效的算法。举个栗子,插入排序的工作方式像对打扑克牌时对手中的扑克牌进行排序,开始时,我们的左手为空并且桌子上的牌面向下。然后...
  • u012129259
  • u012129259
  • 2017-03-08 10:27:48
  • 638

数据结构 - 表插入排序 详解 及 代码(C++)

表插入排序 详解 及 代码(C++) 本文地址: http://blog.csdn.net/caroline_wendy/article/details/24323125 表插入排序(List...
  • u012515223
  • u012515223
  • 2014-04-22 19:12:32
  • 2237

汇编实现排序——直接插入排序

上一篇实现了简单插入排序的算法,这一篇主要实现直接插入排序算法:S0 SEGMENT STACK DW 20 DUP(?) TOP LABEL WORD S0 ENDSS1 SEG...
  • u010429311
  • u010429311
  • 2016-06-21 23:17:42
  • 2432

单向链表插入排序 Java

package linkedList; /** * Definition for singly-linked list. * public class ListNode * { * ...
  • stephenluu
  • stephenluu
  • 2014-04-13 10:44:00
  • 2359

【算法】插入排序/冒泡排序/选择排序

插入排序 插入排序的思想为:从数组的第二个元素开始遍历整个数组。针对每个元素,依次将其前面的所有元素和他进行比较,大于它的元素均向后移动,最后将该元素插入。 插入排序是一种稳定的排序算法。 时间...
  • cauchyweierstrass
  • cauchyweierstrass
  • 2015-11-10 20:33:52
  • 1973

插入排序——深入浅出(图解)

一、基本思想通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应的位置并插入。插入排序非常类似于整扑克牌。在开始摸牌时,左手是空的,牌面朝下放在桌上。接着,一次从桌上摸起一张牌,并将...
  • as02446418
  • as02446418
  • 2015-08-17 20:46:59
  • 2066

秒懂插入排序与选择排序

插入排序原理:它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。 插入排序核心:假设第一个元素排好,之后的元素对排好的部分从后向前比较并逐一移动。 ...
  • booirror
  • booirror
  • 2015-04-28 17:50:26
  • 16636

老生常谈——选择排序和插入排序

所谓的排序就是将一组对象按照某种逻辑顺序重新排列的过程.在研究排序算法时,我们需要考虑排序的成本: 需要计算比较和交换的次数.对于不交换元素的算法需要计算访问数组的次数....
  • dd864140130
  • dd864140130
  • 2016-03-10 13:43:49
  • 1642

【经典算法】:插入排序的实现,通过交换,与众不同!

前言在我的博客里面,我前面写了一篇关于插入排序的实现报告,这篇报告中规中矩,就是最基本的那种插入排序,一个函数起码也得写的估计有20多行代码,然后今天突然灵感一来,发现一种更加高效的方法,然后撰一篇文...
  • qq_23100787
  • qq_23100787
  • 2015-11-26 13:30:33
  • 710

C++模板插入排序

插入排序的C++模板实现
  • zhangxiao93
  • zhangxiao93
  • 2016-03-07 20:19:17
  • 570
收藏助手
不良信息举报
您举报文章:插入排序
举报原因:
原因补充:

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