您现在的位置: 中国男护士网 >> 考试频道 >> 计算机等级 >> 二级辅导 >> C十十 >> 辅导 >> 正文    
  计算机等级考试二级辅导c++常用排序算法 【注册男护士专用博客】          

计算机等级考试二级辅导c++常用排序算法

www.nanhushi.com     佚名   不详 

//选择排序法SelectionSort(int arr[],int n) 
template <typename T> 
void SelectionSort(T arr[],int n) 

int smallIndex;  //表中最小元素的下标 
int pass,j //用来扫描子表的下标 
T temp;  //用来交换表元素的临时变量 

//pass的范围是0~n-2 
for (pass=0;pass<n-1;pass++) 

//从下标pass开始扫描子表 
smallIndex=pass; 

//j遍历整个子表arr[pass+1]到arr[n-1] 
for(j=pass+1;j<n;j++)  
 //如果找到更小的元素,则将该位置赋值给smallIndex  
 if(arr[j]<arr[smallIndex])  
 smallIndex=j; 
//如果smallIndex和pass不在相同的位置  
 //则将子表中的最小项与arr[pass]交换  
 if(smallIndex!=pass)  
 { 
temp=arr[pass]; 
arr[pass]=arr[smallIndex];  
 arr[smallIndex]=temp;  
 } 



/************************************************************************ 
双端选择排序算法:是上面选择排序算法的变种,可以定位每个子表中最小和最大元素 
并把它们分别放在子表的开头和结尾. 
************************************************************************/ 
//双端选择排序算法函数deSelSort()的实现 
template <typename T> 
void deSelSort(T arr[],int n) 

int smallIndex,largeIndex; //表中最小及最大元素的下标 
int leftPass=0,rightPass=n-1,i,j;//用来从表左边及右边扫描子表的下标 
T temp; //用于交换元素的临时变量 

while (leftPass<=rightPass) 

//从左边及右边开始扫描子表 
smallIndex=leftPass; 
largeIndex=rightPass; 
//j和i遍历整个子表arr[LeftPass]~arr[rightPass] 
for (i=leftPass+1;i<rightPass;i++)  
 //如果找到更小的元素,则将该位置赋值给smallIndex  
 if (arr<arr[smallIndex])  
 smallIndex=i;  

 //如果smallIndex和leftPass不在相同的位置 
//则将子表中的最小项与arr[pass]交换  
 if (smallIndex!=leftPass)  
 { 
temp=arr[leftPass]; 
arr[leftPass]=arr[smallIndex]; 
arr[smallIndex]=temp; 

}  
  
 for (j=rightPass-1;j>leftPass;j--)  
 if(arr[j]>arr[largeIndex]) 
largeIndex=j;  


 
 if(largeIndex!=rightPass)  
 {  
 temp=arr[rightPass]; 
arr[rightPass]=arr[largeIndex];  
 arr[largeIndex]=temp;  
 }  
  
 //从两头收缩子表  
 leftPass++; 
rightPass--; 



//自编冒泡法排序算法函数bubbleSort()的实现 
template <typename T> 
int bubbleSort(T arr[],int n) 

bool exchanged=false; //是否发生交换 
int i,j;         //用于遍历子表的下标 
T temp;           //用于交换元素的临时变量 

//开始遍历过程,以下标j构成子表,共有n-1个子表 
for (j=n-1;j>=0;j--) //j从后往前收缩n-1~0,以构成子表0~n-1,0~n-2,0~n-3..0~1 

exchanged=false; 
for (i=0;i<j;i++) //遍历子表范围0~j 
{  
 if (arr>arr[i+1])  
 {  
 temp=arr;  
 arr=arr[i+1];  
 arr[i+1]=temp;  
 exchanged=true;  
 } 

if (!exchanged) return n-j-1;//如果在一次遍历中没有发生交换,则表示已经 
//排序好,中断遍历过程 

return n-1-j; 



//冒泡法排序一般算法函数bubbleSortEx()的实现 
template <typename T> 
int bubbleSortEx(T arr[],int n) 

int i,pass;         //用于遍历子表的下标 
T temp;           //用于交换元素的临时变量 

//开始遍历过程,以下标j构成子表,共有n-1个子表 
for (pass=0;pass<n;pass++) //pass从后往后扩大0~n-1,以构成子表0~n-1,0~n-2,0~n-3..0~1 

for (i=0;i<n-pass;i++) //遍历子表范围0~n-pass 
{ if (arr>arr[i+1])  
 {  
 temp=arr;  
 arr=arr[i+1];  
 arr[i+1]=temp;  
 } 


return pass; 
}

 

文章录入:杜斌    责任编辑:杜斌 
  • 上一篇文章:

  • 下一篇文章:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
     

    联 系 信 息
    QQ:88236621
    电话:15853773350
    E-Mail:malenurse@163.com
    免费发布招聘信息
    做中国最专业男护士门户网站
    最 新 热 门
    最 新 推 荐
    相 关 文 章
    没有相关文章
    专 题 栏 目

      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)                            【进男护士社区逛逛】
    姓 名:
    * 游客填写  ·注册用户 ·忘记密码
    主 页:

    评 分:
    1分 2分 3分 4分 5分
    评论内容:
  • 请遵守《互联网电子公告服务管理规定》及中华人民共和国其他各项有关法律法规。
  • 严禁发表危害国家安全、损害国家利益、破坏民族团结、破坏国家宗教政策、破坏社会稳定、侮辱、诽谤、教唆、淫秽等内容的评论 。
  • 用户需对自己在使用本站服务过程中的行为承担法律责任(直接或间接导致的)。
  • 本站管理员有权保留或删除评论内容。
  • 评论内容只代表网友个人观点,与本网站立场无关。