插入排序
一、复杂度和稳定性
时间复杂度:最坏和平均:O(N*N),最好O(N)
空间复杂度:O(1)
稳定性:稳定
二、CPP实现
#include <vector>
#include <stdlib.h>
#include <time.h>
using namespace std;
void insert_sort(vector<int>& v)
{
size_t size = v.size();
for(int i = 1; i < size; ++i)
{
int tmp = v[i];
int j = i - 1;
while(j > -1 && tmp < v[j])
{
v[j] = v[j - 1];
j--;
}
v[j + 1] = tmp;
}
}
int main(int argc, char* argv[])
{
srand(time(NULL));
vector<int> nums;
int size = rand() % 100 + 10;
for(int i = 0; i < size; ++i)
nums.push_back(rand() % 100);
insert_sort(nums);
return 0;
}
选择排序
一、复杂度和稳定性
时间复杂度:最坏、最好和平均:O(N*N)
空间复杂度:O(1)
稳定性:不稳定
二、CPP实现
#include <vector>
#include <stdlib.h>
#include <time.h>
void select_sort(vector<int>& v)
{
size_t size = v.size();
int min = 0;
for(int i = 0; i < size; ++i)
{
min = i;
for(int j = i; j < size; j++)
min = v[min] > v[j] ? j : min;
swap(v[min], v[i]);
}
}
int main(int argc, char* argv[])
{
srand(time(NULL));
vector<int> nums;
int size = rand() % 100 + 10;
for(int i = 0; i < size; ++i)
nums.push_back(rand() % 100);
select_sort(nums);
return 0;
}