【第22期】观点:IT 行业加班,到底有没有价值?

排序之插入排序

原创 2015年11月20日 10:44:52
insertion sorting
有一个已经有序的数据序列,要求在这个已经排好的数据序列中插入一个数,要求插入此数据后,序列仍然有序。
每次插入一个数据,就需要和序列中的其他数据作比较,所以时间复杂度是O(n^2)。这么大的时间复杂度,很明显这个排序适合用来做少量数据的排序。
插入排序是稳定排序,也就是说,两个相同元素,在排序后前后没发生变化。
最差情况:反序,需要移动n*(n-1)/2个元素 。
最好情况:正序,不需要移动元素。

空间复杂度是O(1).

#include<iostream>

using namespace std;
/*****
function insertsort to sort
********/ 
void insertsort(int a[],int n)
{
	for(int i = 0; i < n; i++)
	{
		//the value of a[i] will be changed ,so record it in tmp
		int tmp = a[i],j = i;
		//make a space for the new element
		while(j > 0 && a[j - 1] > tmp)
		{
			a[j] = a[j - 1];
			j--;
		}
		//insert the number to the ordered list
		a[j] = tmp;
	}
}
/*****
main function to check
********/ 
int main()
{
	int n,a[101];
	cin>>n;
	
	for(int i =0; i < n; i++)
	{
		cin>>a[i];
	}
		
	insertsort(a,n);
	
	for(int i =0; i < n; i++)
	{
		cout<<a[i]<<" ";
	}
	cout<<endl;
	return 0;
} 


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

相关文章推荐

【初探】直接插入排序

直接插入排序简介● 其基本思想是:把待排序的纪录按其关键码值的大小逐个插入到一个已经排好序的有序序列中,直到所有的纪录插入完为止,得到一个新的有序序列。● 插入排序是基于比较的排序。所谓的基于比...

直接插入排序的Java实现、性能分析以及适用场景

1.直接插入排序的Java实现:代码如下:package com.zm.testSort; /** * 直接插入排序类 * @author zm */ public class InsertSo...

程序员升职加薪指南!还缺一个“证”!

CSDN出品,立即查看!

插入排序

有一个已经有序的数据序列,要求在这个已经排好的数据序列中插入一个数,但要求插入后此数据序列仍然有序,这个时候就要用到一种新的排序方法--插入排序法,插入排序的基本操作就是将一个数据插入到已经排好序的有...

插入排序及其优化

插入排序:把一个无序的数组分为两部分,一部分为有序(刚开始只有一个元素),一部分为无序(从第二个元素开始),将无序元素一个一个插入到有序元素中。void InsertSort(int *arr, si...

【初探】 二分(折半)插入排序

基本概念● 插入排序(binary insertion sort):是对插入排序算法的一种改进,由于排序算法过程中,就是不断的依次将元素插入前面已排好序的序列中。由于前半部分为已排好序的数列,这样我...
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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