void SelectSort(vector<int>& nums)
{
int n = nums.size();
int begin = 0, end = n - 1;
for (int j = 0; j < n-1; ++j)
{
int maxi = 0;
for (int i = 0; i < n-j; ++i)
{
if (nums[maxi] < nums[i])
{
maxi = i;
}
}
swap(nums[end--], nums[maxi]);
}
}
选择排序仍然有一种优化方法:
每次选择的时候,可以同时选择两个数,这样就可以减少遍历的次数,提高效率。
优化后实现方法:
cpp复制代码
void SelectSort(vector<int>& nums)
{
int n = nums.size();
int begin = 0, end = n - 1;
while(begin < end)
{
int maxi = begin, mini = begin;
for (int i = begin; i <= end; ++i)
{
if (nums[maxi] < nums[i])
{
maxi = i;
}
if (nums[mini] > nums[i])
{
mini = i;
}
}
swap(nums[mini], nums[begin]);
if (maxi == begin)
{
maxi = mini;
}
swap(nums[maxi], nums[end]);
begin++;
end--;
}
}