手写排序算法(一)
1、冒泡排序
vector<int> bubble(vector<int> nums)
{
for (int i = nums.size() - 1; i > 0; i--)
{
bool judge = false;
for (int j = 0; j < i; j++)
{
if (nums[j] > nums[j + 1])
{
int t = nums[j];
nums[j] = nums[j + 1];
nums[j + 1] = t;
judge = true;
}
}
if (judge == false)
break;
}
return nums;
}
2、插入排序
vector<int> insert(vector<int> nums)
{
for (int i = 1; i < nums.size(); i++)
{
for (int j = i; j > 0; j--)
{
if (nums[j] > nums[j - 1])
{
int t = nums[j];
nums[j] = nums[j - 1];
nums[j - 1] = t;
}
}
}
return nums;
}
3、选择排序
vector<int> selection(vector<int> nums)
{
for (int i = 0; i < nums.size(); i++)
{
int maxvalue = nums[i], index = i;
for (int j = i + 1; j < nums.size(); j++)
{
if (nums[j] > maxvalue)
{
index = j;
maxvalue = nums[j];
}
}
if (i != index)
{
int t = nums[i];
nums[i] = nums[index];
nums[index] = t;
}
}
return nums;
}
4、希尔排序
vector<int> shellSort(vector<int> nums)
{
int gap = nums.size() / 2;
while (gap > 0)
{
for (int i = gap; i < nums.size(); i++)
{
int temp = nums[i];
int j = i;
while (j >= gap && nums[j] < nums[j - gap])
{
nums[j] = nums[j - gap];
j = j - gap;
}
nums[j] = temp;
}
gap = gap / 2;
}
return nums;
}
5、归并排序
void mergeSort(vector<int> &nums, int l, int r)
{
if (l >= r)
return;
int mid = (l + r) / 2;
mergeSort(nums, l, mid);
mergeSort(nums, mid + 1, r);
vector<int> temp;
int i = l;
int j = mid + 1;
while (i <= mid && j <= r)
{
if (nums[i] < nums[j])
{
temp.push_back(nums[i]);
i++;
}
else
{
temp.push_back(nums[j]);
j++;
}
}
while (i <= mid)
temp.push_back(nums[i++]);
while (j <= r)
temp.push_back(nums[j++]);
for (int i : temp)
nums[l++] = i;
}