选择排序 C++版
一、 选择排序
1、选择排序
找到数组中最小的元素放到第一个位置,找到数组中第二个最小的元素放到第二个位置。。。直到所有的元素都在合适的位置为止。
2、优缺点
优点:1、赋值次数少
缺点:1、所有情况下的交换次数都一样
算法复杂度:O(n~n^2) 空间复杂度:O(n)+辅助变量空间
二、测试代码
#include <iostream>
#include <vector>
using namespace std;
/************************
选择排序:找到数组中最小的元素放到第一个位置,找到数组中第二个最小的元素
放到第二个位置。。。直到所有的元素都在合适的位置为止。
优点:1、赋值次数少
缺点:1、所有情况下的交换次数都一样
算法复杂度:O(n~n^2) 空间复杂度:O(n)+辅助变量空间
*************************/
// 实现方法一
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;
}
三、测试结果
本文为博主原创文章,未经博主允许请勿转载!作者:ISmileLi