复习一下几种常见的排序算法:选择排序,插入排序,快速排序,归并排序,和堆排序,有些如果这篇博客看得不清楚的也没关系,在每个小结里面都有各个排序算法我觉得讲得很好的博客地址链接,大家可以去看一看。另附上所有算法的代码github链接:排序算法。
一、选择排序
算法思想:对于有n个元素的数组,一共有n躺排序,每趟排序要保证前 i i i项元素已经排好序,对于第 i i i趟排序,从第 i i i个元素开始遍历数组,将当前遍历元素中最小的值与第i个元素交换。具体代码实现如下:
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
class SortAlg
{
public:
void SelectionSort(vector<int>& array)
{
int size = array.size();
for(int i = 0; i < size; i++)
{
int temp = array[i];
int index = i;
for(int j = i; j < size; j++)
{
if(array[j] < temp)//小于当前最小值,记录当前下标
{
temp = array[j];
index = j;
}
}
swap(array[i], array[index]);//每趟排序后交换
}
return;
}
};
int main()
{
//测试
vector<int> array{
4,5,1,6,2,7,3,8};
SortAlg solution;
solution.SelectionSort(array);
vector<int>::iterator it = array.begin();
while(it != array.end())
cout<<*it++<<endl;
return 0;
}
算法时间复杂度分析:平均复杂度为 O ( n 2 ) O(n^2)