常用的排序算法
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n;
cin>>n;
vector<int> nums;
for(int i=0;i<n;i++)
{
int c;
cin>>c;
nums.push_back(c);
}
count_sort(nums,0,n-1);
for(auto c:nums)
{
cout<<c<<' ';
}
return 0;
}
快速排序
void quick_sort(vector<int>&nums,int l,int r)
{
if(l>=r) return;
int mid=nums[(l+r)>>1];
int i=l-1,j=r+1;
while(i<j)
{
do i++;while(nums[i]<mid);
do j--;while(nums[j]>mid);
if(i<j) swap(nums[i],nums[j]);
}
quick_sort(nums,l,j);
quick_sort(nums,j+1,r);
}
归并排序
const int N=100010;
vector<int> a(N);
void merge_sort(vector<int>& nums,int l,int r)
{
if(l>=r) return;
int mid=(l+r)>>1;
merge_sort(nums,l,mid),merge_sort(nums,mid+1,r);
int i=l,j=mid+1;
int k=0;
while(i<=mid&&j<=r)
{
if(nums[i]<nums[j]) a[k++]=nums[i++];
else a[k++]=nums[j++];
}
while(i<=mid) a[k++]=nums[i++];
while(j<=r) a[k++]=nums[j++];
for(int i=l,j=0;i<=r;i++,j++) nums[i]=a[j];
}
冒泡排序
void bubble_sort(vector<int>&nums,int l,int r)
{
for(int i=0;i<nums.size();i++)
{
int l=0;
while(++l<=r)
{
if(nums[l-1]>nums[l]) swap(nums[l-1],nums[l]);
}
r--;
}
}
选择排序
void select_sort(vector<int>&nums,int l,int r)
{
for(int i=0;i<nums.size();i++)
{
int min_v=INT_MAX,no=0;
for(int j=i;j<=r;j++)
{
if(nums[j]<min_v)
{
min_v=nums[j];
no=j;
}
}
swap(nums[i],nums[no]);
}
}
插入排序
void insert_sort(vector<int>&nums, int l, int r)
{
for (int i = 0; i<nums.size(); i++)
{
int cur = nums[i];
int j = i;
while (j >= 0 && nums[j]>=cur) j--;
nums.erase(nums.begin() + i);
nums.insert(nums.begin() + 1+j, cur);
}
}
orz
建议加堆排序和希尔排序哇
我得再研究研究 希尔给我写晕了 我可太菜了
菜的是我啊!算法基础课菜刷了一半5555555555555555555555555555555555555555555555555555