发布日期:2016-01-06 10:15 来源: 标签: 编程语言 开发语言 C++入门教程 C++选择排序
本章我们主要学习C++中选择排序法,下面我们就做一下具体讲解,希望大家多多支持中国站长网络学院。
选择法:
现在我们终于可以看到一点希望:选择法,这种方法提高了一点性能(某些情况下)
这种方法类似我们人为的排序习惯:从数据中选择最小的同第一个值交换,在从省下的部分中选择最小的与第二个交换,这样往复下去。
#include <iostream.h>
void SelectSort(int* pData,int Count)
{
     int iTemp;
     int iPos;
     for(int i=0;i<Count-1;i++)
     {
         iTemp = pData[i];
         iPos = i;
         for(int j=i+1;j<Count;j++)
         {
             if(pData[j]<iTemp)
             {
                 iTemp = pData[j];
                 iPos = j;
             }
         }
         pData[iPos] = pData[i];
         pData[i] = iTemp;
     }
}
void main()
{
     int data[] = {10,9,8,7,6,5,4};
     SelectSort(data,7);
     for (int i=0;i<7;i++)
         cout<<data[i]<<" ";
     cout<<"\n";
}
倒序(最糟情况)
第一轮:10,9,8,7->(iTemp=9)10,9,8,7->(iTemp=8)10,9,8,7->(iTemp=7)7,9,8,10(交换1次)
第二轮:7,9,8,10->7,9,8,10(iTemp=8)->(iTemp=8)7,8,9,10(交换1次)
第一轮:7,8,9,10->(iTemp=9)7,8,9,10(交换0次)
循环次数:6次
交换次数:2次
其他:
第一轮:8,10,7,9->(iTemp=8)8,10,7,9->(iTemp=7)8,10,7,9->(iTemp=7)7,10,8,9(交换1次)
第二轮:7,10,8,9->(iTemp=8)7,10,8,9->(iTemp=8)7,8,10,9(交换1次)
第一轮:7,8,10,9->(iTemp=9)7,8,9,10(交换1次)
循环次数:6次
交换次数:3次
遗憾的是算法需要的循环次数依然是1/2*(n-1)*n。所以算法复杂度为O(n*n)。
我们来看他的交换。由于每次外层循环只产生一次交换(只有一个最小值)。所以f(n)<=n,所以我们有f(n)=O(n)。所以,在数据较乱的时候,可以减少一定的交换次数。

相关评论

专题信息
    Visual C++是一个功能强大的可视化软件开发工具,是高等院校计算机及相关专业主要核心课程。 本教程对Visual C++ 的应用与开发进行了详细系统的介绍,内容主要包括:Visual C++程序的建立,菜单、工具栏和状态栏的创建,对话框和常用控件,窗口、文档与视图,图形绘制,数据库应用,多媒体技术等。 本教程以案例教学为主,各章节都附有大量的实例,并且操作步骤详细,有利于引导读者更好的消化、理解和实际应用本章节所学的知识内容,希望大家能多多支持中国站长网络学院!