#include<iostream>
#include<vector>
using namespace std;
void maopaoSort(vector<int>& nums)
{
for (int i = 0; i < nums.size() - 1; i++)
{
for (int j = 0; j < nums.size() - 1 - i; j++)
{
if (nums[j + 1] < nums[j])
{
swap(nums[j], nums[j + 1]);
}
}
}
}
void xuanzeSort(vector<int>& nums)
{
for (int i = 0; i < nums.size() - 1; i++)
{
for (int j = i; j < nums.size(); j++)
{
if (nums[j] < nums[i])
{
swap(nums[i], nums[j]);
}
}
}
}
void charuSort(vector<int>& nums)
{
for (int i = 1; i < nums.size(); i++)
{
int temp = nums[i];
for (int j = i - 1; j >= 0; j--)
{
if (nums[j] > temp)
{
nums[j + 1] = nums[j];
}
else
{
nums[j + 1] = temp;
break;
}
nums[j] = temp;
}
}
}
void shellSort(vector<int>& nums)
{
int length = nums.size() / 2;
int i = length;
while (length >= 1)
{
while (i <= nums.size() - 1)
{
int temp = nums[i];
for (int j = i - length; j >= 0; j -= length)
{
if (nums[j] > temp)
{
nums[j + length] = nums[j];
}
else
{
nums[j + length] = temp;
break;
}
nums[j] = temp;
}
i += length;
}
length /= 2;
i = length;
}
}
vector<int> guibingSort_p(vector<int>& nums, int length)
{
vector<int> temp(nums.size(), 0);
int t = 0;
int p1 = 0, p2 = p1 + length;
while (p1 < nums.size() && p2 < nums.size())
{
int i = p1, j = p2;
while (i < p1 + length && j < p2 + length && j < nums.size())
{
if (nums[i] < nums[j])
{
temp[t++] = nums[i++];
}
else
{
temp[t++] = nums[j++];
}
}
while (i < p1 + length && i < nums.size())
{
temp[t++] = nums[i++];
}
while (j < p2 + length && j < nums.size())
{
temp[t++] = nums[j++];
}
p1 = p2 + length;
p2 = p1 + length;
}
while (p1 < nums.size())
{
temp[t++] = nums[p1++];
}
return temp;
}
void guibingSort(vector<int>& nums)
{
int length = 1;
vector<int> temp;
temp = guibingSort_p(nums, length);
length *= 2;
while (length < nums.size())
{
temp = guibingSort_p(temp, length);
length *= 2;
}
nums = temp;
}
//4321
//3421
//1423
//1324
//1234
int quickSort_p(vector<int>& nums, int left, int right)
{
int pivot = (left + right) / 2;
int p1 = left, p2 = right;
while (p1 < p2)
{
while (p1 < pivot && p1 < p2)
{
if (nums[p1] > nums[pivot])
{
swap(nums[p1], nums[pivot]);
pivot = p1;
break;
}
p1++;
}
while (p2 > pivot && p1 < p2)
{
if (nums[p2] < nums[pivot])
{
swap(nums[p2], nums[pivot]);
pivot = p2;
break;
}
p2--;
}
}
return pivot;
}
void quickSort(vector<int>& nums, int left, int right)
{
if (left >= right)
return;
int pivot = quickSort_p(nums, left, right);
quickSort(nums, left, pivot - 1);
quickSort(nums, pivot + 1, right);
}
int main()
{
vector<int> nums;
int n;
cin >> n;
int m;
for (int i = 0; i < n; i++)
{
cin >> m;
nums.push_back(m);
}
cout << "before sort: " << endl;
for (int i = 0; i < n; i++)
{
cout << nums[i] << endl;
}
quickSort(nums, 0, nums.size() - 1);
cout << "after sort: " << endl;
for (int i = 0; i < n; i++)
{
cout << nums[i] << endl;
}
}
排序算法复习
最新推荐文章于 2024-07-19 13:59:11 发布