数据结构与算法分析
插入排序(insertionSort):
插入排序是最简单的排序算法之一。插入排序由趟排序组成,对于到,插入排序保证从位置0到上的元素已经为有序状态。
行为描述:
算法描述:
在第趟时,将位置上的元素向左移动至前个元素中适当的位置<整体前移再插入从而无需反复交换元素>
插入排序的性质:
插入排序的界:
以数为成员的数组的逆序(inversion)是指具有但的序偶。显然,一次交换两个不按顺序排列的相邻元素消除一个逆序,而一个排过序的数组没有逆序。因此插入排序的运行时间为,其中为原始数组中的逆序数。于是,若逆序数是,则插入排序以线性时间运行。
定理:个互异元素的数组的平均逆序数为 【设正序和逆序的数量各占一半】
定理:通过交换相邻元素进行排序的任何算法平均需要时间
插入排序实例:
//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
相关阅读
(一)蚁群算法的由来蚁群算法最早是由Marco Dorigo等人在1991年提出,他们在研究新型算法的过程中,发现蚁群在寻找食物时,通过分泌一种称
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),可以求多源最短路问题。
简介无人机能够在空中自动飞行,直升机可以悬停在空中,地铁可以精准的停在地铁站预设的位置,火车可以按照预定的速度行驶,平衡车可以保