版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/AK_97_CT/article/details/87644237
1、冒泡排序
void Bubble_Sort(vector<int> &vec)
{
for(int i = 0; i < vec.size() -1; i ++)
{
bool flag=false;
for(int j = 0; j < vec.size() - i - 1; j ++)
{
if(vec[j] > vec[j + 1])
{
swap(vec[j],vec[j + 1]);
flag=true;
}
}
if(!flag) break;
}
}
2、选择排序
void Seletion_Sort(vector<int> &vec)
{
for(int i = 0; i < vec.size(); i ++)
{
for(int j = i + 1; j < vec.size(); j ++)
{
if(vec[i] > vec[j])
{
swap(vec[i],vec[j]);
}
}
}
}
3、插入排序
void Insertion_Sort(vector<int> &vec)
{
for(int i = 1; i < vec.size(); i ++)
{
int temp = vec[i],j;
for(j = i - 1; j >= 0; j --)
{
if(temp < vec[j]) vec[j + 1]=vec[j];
else break;
}
vec[j + 1] = temp;
}
}
4、归并排序
void Merge_Sort(vector<int> &vec,int l,int r)
{
if(l >= r) return;
int mid=(l + r) / 2;
Merge_Sort(vec,l,mid);
Merge_Sort(vec,mid + 1,r);
static vector<int> t_vec;
t_vec.clear();
int i = l, j = mid + 1;
while(i <= mid && j <= r) {
if(vec[i] <= vec[j]) t_vec.push_back(vec[i ++ ]);
else t_vec.push_back(vec[j ++ ]);
}
while(i <= mid) t_vec.push_back(vec[i ++ ]);
while(j <= r) t_vec.push_back(vec[j ++ ]);
for(i = l, j = 0; j < t_vec.size(); i ++,j ++) vec[i] = t_vec[j];
}
5、快速排序
void Quick_Sort(vector<int> &vec, int l, int r)
{
if(l >= r) return;
int i = l - 1, j = r + 1,x = vec[(l + r) / 2];
while(i < j)
{
do i ++; while(vec[i] < x);
do j --; while(vec[j] > x);
if(i < j) swap(vec[i],vec[j]);
else
{
Quick_Sort(vec, l, j);
Quick_Sort(vec, j + 1, r);
}
}
}
6、希尔排序
void Shell_Sort(vector& vec)
{
//掌握思想即可
}
7、堆排序
void push_down(vector<int> &heap, int size, int u)
{
int t = u, left = u * 2, right = u * 2 + 1;
if(left <= size && heap[left] > heap[t]) t = left;
if(right <= size && heap[right] > heap[t]) t = right;
if(t != u)
{
swap(heap[t], heap[u]);
push_down(heap, size, t);
}
}
void push_up(vector<int> &heap, int u)
{
while(u / 2 &&heap[u / 2] < heap[u])
{
swap(heap[u / 2], heap[u]);
u /= 2;
}
}
/*
void insert(vector<int> &heap, int size, int x)
{
heap[ ++ size] = x;
push_up(heap, size, x);
}
void remove_top(vector<int> &heap, int &size)
{
heap[1] = heap[size];
size --;
push_down(heap, size, 1);
}
*/
void Heap_Sort(vector<int> &q, int n)
{
int size = n;
for(int i = 1; i <= n; i ++) push_up(q, i);
for(int i = 1; i <= n; i ++)
{
swap(q[1], q[size]);
size --;
push_down(q, size, 1);
}
}
8、计数排序
void Counting_Sort(vector<int> &q, int n)
{
vector<int> cnt(101, 0);
for(int i = 1; i <= n; i ++) cnt[q[i]] ++;
for(int i =1, k = 1; i <= 100; i ++)
{
while(cnt[i])
{
q[k ++] = i;
cnt[i] --;
}
}
}
9、桶排序
void Bucket_Sort(vector<int> &q)
{
//掌握思想即可
}
10、基数排序
int get(int x, int i)
{
while(i -- ) x /= 10;
return x % 10;
}
void Radix_Sort(vector<int> &q, int n)
{
vector<vector<int> > cnt(10);
for(int i = 0; i < 3; i ++)
{
for(int j = 0; j < 10; j ++) cnt[j].clear();
for(int j = 1; j <= n; j ++)
cnt[get(q[j],i)].push_back(q[j]);
for(int j = 0, k = 1; j < 10; j ++)
for(int x : cnt[j])
q[k ++] = x;
}
}
int main()
{
vector<int> vec;
int n;
cin>>n;
vec.resize(n+1);
for(int i = 1; i <= n; i ++) cin>>vec[i];
// Merge_Sort(vec,0,vec.size()-1);
// Bubble_Sort(vec);
// Seletion_Sort(vec);
// Insertion_Sort(vec);
// Quick_Sort(vec,0,vec.size()-1);
// Heap_Sort(vec,n); //索引从1开始
// Counting_Sort(vec,n);
Radix_Sort(vec,n);
for(int i = 1;i <= n;i++) cout<<vec[i]<<endl;
return 0;
}