为了迎接算法设计课半期考,把几个比较简单的算法写了一写
#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
void bubbleSort(vector<int> &q){
for(int i=q.size()-1;i>0;i--)
{
bool flag=false;
for(int j=0;j+1<=i;j++){
if(q[j]>q[j+1]){
swap(q[j],q[j+1]);
flag=true;
}
}
if(!flag)
break;
}
}
void selectSort(vector<int> &q){
int min,len=q.size();
for(int i=0;i<q.size();i++)
{
min=i;
for(int j=i+1;j<q.size();++j)
{
if(q[j]<q[min])
min=j;
}
if(i!=min)
swap(q[i],q[min]);
}
}
void insertSort(vector<int> &q){
for(int i=1;i<q.size();i++)
{
int tmp=q[i];
for(int j=i-1;j>=0;--j){
if(q[j]>tmp)
{
q[j+1]=q[j];
q[j]=tmp;
}
else break;
}
}
}
void shellSort(vector<int> &q){
int gap=q.size()/2;
while(gap){
for(int i=gap;i<q.size();i+=gap){
int t=q[i],j;
for(j=i-gap;j>=0;j-=gap){
if(q[j]>t)
q[j+gap]=q[j];
else
break;
}
q[j+gap]=t;
}
gap/=2;
}
}
void mergeSort(vector<int> &q,int l,int r){
if(l>=r)
return;
int mid=l+r>>1;
mergeSort(q,l,mid);
mergeSort(q,mid+1,r);
static vector<int> w;
w.clear();
int i=l,j=mid+1;
while(i<=mid&&j<=r){
if(q[i]>q[j])
w.push_back(q[j++]);
else
w.push_back(q[i++]);
}
while (i<=mid)
w.push_back(q[i++]);
while(j<=mid)
w.push_back(q[j++]);
for(int i:w)
q[l++]=i;
}
void quickSort(vector<int> &q,int l,int r){
if(l>=r)
return;
int i=l-1,j=r+1,x=q[l+rand()%(r-l+1)];
while(i<j)
{
do j--;
while(q[j]>x);
do i++;
while(q[i]<x);
if(i<j)
swap(q[i],q[j]);
else{
quickSort(q,l,j);
quickSort(q,j+1,r);
}
}
}
int main()
{
int n,t;
vector<int> q;
cin>>n;
for(int i=0;i<n;i++)
{
cin>>t;
q.push_back(t);
}
for(int i=0;i<q.size();i++)
{
cout<<q[i]<<'\n';
}
return 0;
}
|