必威体育Betway必威体育官网
当前位置:首页 > IT技术

数据结构与算法分析-C++描述 第7章 插入排序(insertionSort)

时间:2019-11-05 14:14:33来源:IT技术作者:seo实验室小编阅读:67次「手机版」
 

数据结构与算法分析

插入排序(insertionSort):

      插入排序是最简单的排序算法之一。插入排序由(N-1)趟排序组成,对于p = 1p = N - 1,插入排序保证从位置0到p上的元素已经为有序状态。

行为描述:

算法描述:

在第p趟时,将位置p上的元素向左移动至前p+1个元素中适当的位置<整体前移再插入从而无需反复交换元素>

插入排序的性质:

插入排序的界:\sum_{i=2}^{N} i = O(N^2)

一些简单排序算法(冒泡排序、选择排序)的下界:

以数为成员的数组逆序(inversion)是指具有i < ja[i]>a[j]的序偶(i,j)。显然,一次交换两个不按顺序排列的相邻元素消除一个逆序,而一个排过序的数组没有逆序。因此插入排序的运行时间为O(N+I),其中I为原始数组中的逆序数。于是,若逆序数是O(N),则插入排序以线性时间运行。

定理:N个互异元素的数组的平均逆序数为N(N-1)/4 【设正序和逆序的数量各占一半】

定理:通过交换相邻元素进行排序的任何算法平均需要\Omega (N^2)时间

插入排序实例:

//insertionSort.cpp
#include<iOStream>
#include<vector>
#include<algorithm>

using namespace std;

template<class Compareable>
void inserationSort(vector<Compareable> &v){
	int j;
	//traverse the vector
	for(int p  = 1; p < v.size(); p++){
		Compareable temp = v[p];
		//find the proper location
		for(j = p; j > 0 && temp < v[j - 1]; j--){
			v[j] = v[j - 1];
		}
		//insert into proper location
		v[j] = temp;
	}
}

int main(){
	int arr[] = {81, 94, 11, 96, 12, 35, 17, 95, 28, 58, 41, 75, 15};
	int len = sizeof(arr) / sizeof(arr[0]);
	vector<int> v;
	for(int i = 0 ; i < len; i++){
		v.push_back(arr[i]);
	}
	
	cout << "******* the original data ***********" << endl;
	for(typename vector<int>::iterator itr = v.begin(); itr != v.end(); ++itr){
		cout << *itr << " ";
	}
	cout << endl;
	
	cout << "******* the sorted data ***********" << endl;
	inserationSort(v);
	for(typename vector<int>::iterator itr = v.begin(); itr != v.end(); ++itr){
		cout << *itr << " ";
	}
	cout << endl;
	
	cout << " done ." << endl;
	return 0;
}

practice makes perfect !

文章最后发布于: 2019-04-13 16:10:54

相关阅读

蚁群算法matlab

(一)蚁群算法的由来蚁群算法最早是由Marco Dorigo等人在1991年提出,他们在研究新型算法的过程中,发现蚁群在寻找食物时,通过分泌一种称

数据加密算法--详解DES算法原理与实现

DES算法简介 DES(Data Encryption Standard)是目前最为流行的加密算法之一。DES是对称的,也就是说它使用同一个密钥来加密和解密

算法竞赛入门经典-习题3-6 纵横字谜的答案(Crossword A

习题3-6纵横字谜的答案(Crossword Answers, ACM/ICPC World Finals 1994,UVa232)输入一个r行c列(1≤r,c≤10)的网格,黑格用“*”表示,每

几个最短路径的算法

一、floyd1.介绍 floyd算法只有五行代码,代码简单,三个for循环就可以解决问题,所以它的时间复杂度为O(n^3),可以求多源最短路问题。

自己对PID控制算法的一点见解

简介无人机能够在空中自动飞行,直升机可以悬停在空中,地铁可以精准的停在地铁站预设的位置,火车可以按照预定的速度行驶,平衡车可以保

分享到:

栏目导航

推荐阅读

热门阅读