插入排序和求逆序数
来源:互联网 发布:linux tomcat无法启动 编辑:程序博客网 时间:2024/06/05 03:59
//插入排序的STL版本。
#include "stdafx.h"#include <iostream>#include <string>#include <vector>#include <list>#include <iterator>#include "1.h"using namespace std;int main(int argc,char** argv){int a[]={5,1,9,4,6,2,0,3,8,7};insertionSort<int*>(a,a+10); //模板参数为具体类型的指针copy(a,a+9,ostream_iterator<int>(cout," "));vector<int> va = vector<int>(a,a+3);insertionSort<vector<int>::iterator>(va.begin(),va.end());cout<< endl;copy(va.begin(),va.end(),ostream_iterator<int>(cout," "));cout<<endl;return(0);}template<typename Iterator>void insertionSort(const Iterator &a,const Iterator &b){typedef typename iterator_traits<Iterator>::value_type T;int i,j,n=distance(a,b);T key;Iterator p,q,t;for(j=1,q=p=a,p++,t=p;j<n;j++,q=p,p++,t=p){key=*p;i=j-1;while(i>=0 && *q>key){*t=*q;i--,t--,q--;}*t=key;}}利用插入排序的思想,可以解决逆序数的问题。
例如,给定序列A<2,3,8,6,1>求其逆序个数
答案为5个:<2,1> <3,1> <8,1> <6,1> <8,6>
插入排序:假定A[1:j-1]为有序的,排序A[j]的过程为,不断的将A[j]与A[1:j-1]比较直到遇到小于A[j]的元素停止。
这之前的所有比较元素均大于A[j],根据逆序的定义可知,这个比较次数为逆序数
上述求逆序数的程序即为插入排序中加入一个变量countint main(int argc,char** argv){ int a[]={2,3,8,6,1}; int i,j,n=sizeof(a)/sizeof(int),key; int count = 0; //逆序个数 for(i=1;i<n;i++) { key = a[i]; for(j=i-1;j>=0;j--) { if(key < a[j]) { a[j+1] = a[j]; count++; } else break; } a[j+1] = key; }
cout << count; return(0);}
0 0
- 插入排序和求逆序数
- 归并排序和求逆序数对
- 归并排序和求逆序数
- 归并排序,求逆序数
- 归并排序求逆序数
- 归并排序求逆序数
- 归并排序求逆序数
- 归并排序求逆序数
- 归并排序求逆序数
- 归并排序求逆序数
- 归并排序求逆序数
- 归并排序求逆序数
- 归并排序求逆序数
- 归并排序求逆序数
- 归并排序求逆序数
- 求逆序数(归并排序)
- 归并排序求逆序数
- 归并排序&求逆序数
- java将序列化对象存到文件中
- ORA-28547 ORA-01034和ORA-27101的一种解决方法
- Tslib1.4在mini2440上的移植
- 十一、从头到尾彻底解析Hash 表算法
- struts2不能拦截jsp:forward的问题
- 插入排序和求逆序数
- 访问CvSeq内部数据
- 探究观察者设计模式
- Just some pieces of general review on interfacing
- IOS中对控件的操作
- java 序列化serialVersionUID 作用
- microchip MPLAM 错误解决
- 几条sql语句:统计不重复个数、存在更新不存在插入、case when用法
- 【android】一些不错的BLOG