数据结构--向量--选择排序

来源:互联网 发布: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
原创粉丝点击