数据结构--向量--选择排序
来源:互联网 发布:java输出质数 编辑:程序博客网 时间:2024/05/22 13:28
现在来看一看一种常规的排序算法,选择排序。
本页内容
1.选择排序的原理
2.代码实现
3.在向量模板中实现
4.总体评价
1.选择排序的原理
选择排序是通过重复将未扫描的数列中最大元素选出,使之向后就位,最后将整个数列排为有序为止。可看下图实例:
2.代码实现
#include<iostream>using namespace std;void selectionSort(int *A,int lo,int hi){int temp;//中间交换元素 int sL=hi;//扫面长度 for(int i=lo;i<hi;i++)// {int max=lo;//最大值下标 for(int j=lo;j<sL;j++){if(A[max]<A[j]) {max=j; }}sL--;//每扫面一次,搜索区间减少1位//交换,使扫描区间中最大元素就位 temp=A[max];A[max]=A[sL];A[sL]=temp;}}int main(){/***********测试*********/int a[10];cout<<"测试数组为:";for(int i=0;i<10;i++){a[i]=9-i;cout<<a[i]<<" "; } cout<<endl;selectionSort(a,0,10);cout<<"selectionSort后:";for(int i=0;i<10;i++){cout<<a[i]<<" ";} /***********************/return 0;}运行结果:
3.在向量模板中实现
template<typename T>void myVector<T>::selectionSort(Rank lo,Rank hi){Rank sL=hi;//扫面长度 for(Rank i=lo;i<hi;i++)// {Rank max=lo;//最大值下标 for(Rank j=lo;j<sL;j++){if(_elem[max]<_elem[j]) {max=j; }}sL--;//每扫面一次,搜索区间减少1位swap(_elem[max],_elem[sL]);//交换,使扫描区间中最大元素就位 }}
4.总体评价
选择排序的复杂度虽然为O(n^2),但它却比起泡排序要好不少。起泡排序可以说是一种特殊的选择排序,但其交换的次数实在是太多了(相邻两个元素一逆序就换)。而向上述的这种选择排序的算法每次扫面只交换一次( swap(_elem[max],_elem[sL]) ),这就是它比起泡排序效率高的地方。
想要学习更多关于向量的知识,请点击!!
1 0
- 数据结构--向量--选择排序
- 数据结构--向量--起泡排序
- 数据结构--向量--归并排序
- 数据结构 排序 选择排序
- 【数据结构】:排序--选择排序
- 数据结构之选择排序
- 数据结构-选择类排序
- 数据结构算法----选择排序
- 【数据结构】选择排序
- 数据结构-选择排序算法
- java数据结构--选择排序
- C++数据结构--选择排序
- 数据结构 - 选择排序
- 【数据结构】选择排序
- 数据结构-直接选择排序
- 数据结构之选择排序
- 数据结构JAVA---选择排序
- 数据结构-选择排序
- 开发板挂载NFS文件系统
- Pig_6. 数据摄取 & 输出 -- 结构化数据 -- 待完善
- 关于Springmvc(1)
- 战争哲学
- maven学习五:maven集成tomcat插件发布web项目
- 数据结构--向量--选择排序
- Linux C 信号处理
- JavaFX入门(二):JavaFX和FXML
- 《CSAPP》系统级I/O
- 结合个人经历总结的前端入门方法
- Pig_6. 数据摄取 & 输出 -- 半结构化数据 -- 待完善
- Android Studio 下载地址与简单配置
- Gradle和其他配置文件的工作
- Linux_shell_基础