选择排序 C++版

版权声明:本文为博主原创文章,转载请注明出处。作者:ISmileLi 博客地址:http://blog.csdn.net/toby54king。 https://blog.csdn.net/toby54king/article/details/83689211

一、说明:选择排序的原理在注释中,选择排序中使用了模板来传入数据,详细情况看下面的测试代码。

二、测试代码

#include <iostream>
#include <vector>

using namespace std;

/************************
选择排序:找到数组中最小的元素放到第一个位置,找到数组中第二个最小的元素
放到第二个位置。。。直到所有的元素都在合适的位置为止。
优点:1、赋值次数少
缺点:1、所有情况下的交换次数都一样
算法复杂度:O(n~n^2) 空间复杂度:O(1)
*************************/

// 实现方法一
template<typename T>
void selectSort1(T data[], int n)
{
    int min = 0;
    for(int i=0; i<n-1; i++)
    {
        min=i;
        for(int j=i+1; j<n; j++)
        {
            if(data[j]<data[min])
            {
                min = j;
            }
        }
        T temp = data[min];
        data[min] = data[i];
        data[i] = temp;
    }
}

// 实现方法二 改进版
template<typename T>
void selectSort2(T data[], int n)
{
    int min = 0;
    for(int i=0; i<n-1; i++)
    {
        min=i;
        for(int j=i+1; j<n; j++)
        {
            if(data[j]<data[min])
            {
                min = j;
            }
        }
// 此改进版对数值和字符操作时效率并没有提高多少,但是当判断的是
// 结构体等复合类型时可以减少赋值的次数,提高了效率
        if(min != i)
        {
            T temp = data[min];
            data[min] = data[i];
            data[i] = temp;
        }
    }
}

// 实现方法三 改进版
template<typename T>
void selectSort3(vector<T> &data)
{
    int min = 0;
    for(int i=0; i<data.size()-1; i++)
    {
        min=i;
        for(int j=i+1; j<data.size(); j++)
        {
            if(data[j]<data[min])
            {
                min = j;
            }
        }
// 此改进版对数值和字符操作时效率并没有提高多少,但是当判断的是
// 结构体等复合类型时可以减少赋值的次数,提高了效率
        if(min != i)
        {
            T temp = data[min];
            data[min] = data[i];
            data[i] = temp;
        }
    }
}


int main()
{
    int tempArr[] = {0,4,3,5,6,7,9,8,2,1};
    int arrSize = sizeof(tempArr)/sizeof(tempArr[0]);
    cout << "arrSize=" << arrSize << endl;
    // selectSort test
    // selectSort1(tempArr,arrSize);
    // selectSort2(tempArr,arrSize);
    vector<int> tempVec(tempArr,tempArr+arrSize);// 使用数组初始化vector
    selectSort3(tempVec);
    cout << "===========selectSort tempArr==========" << endl;
    for(int i=0; i<arrSize; i++)
    {
        cout << tempArr[i] << endl;
    }
    cout << "===========selectSort tempVec==========" << endl;
    for(int i=0; i<arrSize; i++)
    {
        cout << tempVec[i] << endl;
    }
    cout << "Hello World!" << endl;
    return 0;
}

三、测试结果
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/toby54king/article/details/83689211
今日推荐