#include <iostream>
#include <vector>
using namespace std;
void merge(vector<int>& nums, int start, int middle, int end) {
int len = end - start;
vector<int> temp(len + 1);
int i = start;
int j = middle + 1;
int k = 0;
while (i <= middle && j <= end) {
if (nums[i] < nums[j]) {
temp[k++] = nums[i++];
}
else {
temp[k++] = nums[j++];
}
}
while (i <= middle) {
temp[k++] = nums[i++];
}
while (j <= end) {
temp[k++] = nums[j++];
}
for (int i = start; i <= end; i++) {
nums[i] = temp[i - start];
}
}
void merge_sort(vector<int>& nums, int start, int end) {
int middle = (start + end) / 2;
if (start < end) {
merge_sort(nums, start, middle);
merge_sort(nums, middle + 1, end);
merge(nums, start, middle, end);
}
}
void quick_sort(vector<int>& nums, int start, int end) {
int left = start;
int right = end;
if (left > right) return;
int pvote = nums[left];
while (left != right) {
while (nums[right] >= pvote && left < right) {
right--;
}
while (nums[left] <= pvote && left < right) {
left++;
}
if (left < right) {
int temp = nums[left];
nums[left] = nums[right];
nums[right] = temp;
}
}
nums[start] = nums[left];
nums[left] = pvote;
quick_sort(nums, start, left - 1);
quick_sort(nums, left + 1, end);
}
void swap(int& a, int& b) {
int temp = a;
a = b;
b = temp;
}
void bubble_sort(vector<int>& nums) {
int len = nums.size();
for (int i = 0; i < len; i++) {
for (int j = 1; j < len - i; j++) {
if (nums[j - 1] > nums[j]) {
swap(nums[j - 1], nums[j]);
}
}
}
}
void insert_sort(vector<int>& nums) {
int len = nums.size();
for (int i = 1; i < len; i++) {
int target = nums[i];
int j;
for (j = i - 1; j >= 0 && target < nums[j]; j--) {
nums[j + 1] = nums[j];
}
nums[j + 1] = target;
}
}
void select_sort(vector<int>& nums) {
int len = nums.size();
for (int i = 0; i < len; i++) {
int max_index = i;
for (int j = i; j < len; j++) {
if (nums[j] > nums[max_index]) {
max_index = j;
}
}
swap(nums[i], nums[max_index]);
}
}
int main() {
vector<int> nums = { 1, 3, -1, 2 };
int len = nums.size();
insert_sort(nums);
return 0;
}