计数排序、选择排序、冒泡排序、插入排序的实现以及它们的比较次数和移动次数
来源:互联网 发布:网页源码怎么修改 编辑:程序博客网 时间:2024/06/05 00:39
//名次计算template<class T>void rank1(T a[],int n,int r[]){for(int i=0;i<n;i++){r[i]=0;}for(int i=1;i<n;i++){for(int j=0;j<i;j++){if(a[j]<=a[i])r[i]++;elser[j]++;}}}//计数排序 元素比较次数为(n-1)n/2,移动次数为2ntemplate<class T>void resrrangge(T a[],n,int r[]){T *u=new T[n];for(int i=0;i<n;i++){u[r[i]]-a[i];}for(int i=0;i<n;i++){a[i]=u[i];}delete [] u;}//寻找最大元素位置template<class T>int indexOfMax(T a[],int n){int indexOfMax=0;for(int i=1;i<n;i++){if(a[indexOfMax]<a[i])indexOfMax=i;}return indexOfMax;}//选择排序 元素比较次数为(n-1)n/2,移动次数为3(n-1)template<class T>void selectionSort(T a[],int n){for(int size=n;size>1;size--){int j=indexOfMax(a,size);swap(a[j],a[size-1]);}}//一次冒泡过程template<class T>void bubble(T a[],n){for(int i=0;i<n-1;i++){if(a[i]>a[i+1[)swap(a[i],a[i+1]);}}//冒泡排序 比较次数为(n-1)n/2template<class T>void bubbleSort(T a[],int n){for(int i=n;i>1;i--){bubble(a,i);}}//在有序数组中插入一个元素template<class T>void insert(T a[],int & n,const T& x){int i;for(int i=n-1;i>=0 && x<a[i];i--){a[i+1]=a[i];}a[i+1]=x;n++;}//原地重排数组元素template<class T>void rearrange(T a[],int n,int r[]){for(int i=0;i<n;i++){while(r[i]!=i){int t=r[i];swap(a[t],a[i]);swap(r[t],r[i]);}}}//优化后的选择排序template<class T>void selectionSort1(T a[],int n){bool sorted=false;for(int size=n;!sorted && size>1;size--){int indexOfMax=0;sorted=true;for(int i=1;i<size;i++){if(a[indexOfMax]<a[i])i=indexOfMax;elsesorted=false;}swap(a[indexOfMax],a[size-1]);}}//插入排序 比较次数为n-1~(n-1)n/2template<class T>void insertSort(T a[],int n){for(int i=0;i<n;i++){T t=a[i];int j;for(j=i-1;j>=0 && t<a[j];j--){a[j+1]=a[j];}a[j+1]=t;}}
//折半查找template<class T>int binarySearch(T a[],int n,const T &x){int left=0;int right=n-1;while(left<=right){int middle=(left+right)/2;if(a[middle]==x)return middle;else if(a[middle]<x)left=midddle+1;elseright=middle-1;}return -1;}
阅读全文
0 0
- 计数排序、选择排序、冒泡排序、插入排序的实现以及它们的比较次数和移动次数
- 插入排序移动次数
- 冒泡排序、选择排序和插入排序的实现
- 插入排序中元素的移动次数
- 插入排序需要比较的次数
- 插入排序、冒泡排序以及它们的区别
- 冒泡排序、选择排序、插入排序的比较
- 冒泡排序,选择排序,插入排序的比较
- 冒泡排序、插入排序、选择排序的原理及比较
- 冒泡排序的交换次数
- 冒泡排序的交换次数
- 选择、插入、冒泡排序实现和比较
- 选择排序和冒泡排序的比较
- 比较次数最少的排序
- 冒泡排序和选择排序以及选择排序的优化
- 冒泡排序、选择排序、插入排序的js实现
- 有关的插入排序、选择排序、快速排序和冒泡排序C++的实现
- 冒泡,选择,插入排序的效率比较
- JVM解读-类加载机制
- 【数据结构】队列
- JavaMail核心API和主要的编程步骤(3)
- ueditor + springmvc + 阿里云aliyun oss 完美整合
- 【android x86 5.1.1】 adb install 流程分析
- 计数排序、选择排序、冒泡排序、插入排序的实现以及它们的比较次数和移动次数
- 我录制的《Java + JDBC + Freemarker引擎实现强大的代码生成器》视频教程,发布了
- 最短路径
- Flume定制实战
- Spark与Job Server整合原理与实战
- 【数据结构】散列表
- 校招真题 百度 买帽子
- 实验常用的ethtool命令
- 文章标题