ソートアルゴリズムの概要---コード+パフォーマンス
7115 ワード
// data_sort_alg.cpp : 。
//
#include "stdafx.h"
#include "sort_alg.h"
#include
#include
void show(std::vector &a)
{
std::vector::iterator it=a.begin();
while(it!=a.end())
{
std::cout< src(a,a+11);
std::vector src1(b,b+12); //heap sort
std::vector src2(c,c+11); //bucket sort
std::vector src3(d,d+11); // radix sort
std::cout<
#ifndef SORT_ALG_H
#define SORT_ALG_H
#include
void bubble_sort(std::vector &a);
void shell_sort(std::vector &a);
void simple_sort(std::vector &a);
void merge_sort(std::vector &s,int b,int e);
void insert_sort(std::vector& a);
void heap_sort(std::vector &a);
void fast_sort(std::vector &a,int start,int end);
void bucket_sort(std::vector &a);
void radix_sort(std::vector &a);
#endif
#include "stdafx.h"
#include
#include
#define STEP 5
/*==============================
1 name:bubble sort
--------------------------------
time complexity:
worst average best
O(n^2) O(n^2) O(n)
--------------------------------
space complexity:
O(1)
--------------------------------
stability:
stable
==============================*/
void bubble_sort(std::vector &a)
{
for(int i=a.size()-1;i>0;i--)
{
for(int j=0;ja[j+1])
{
std::swap(a[j],a[j+1]);
}
}
}
return;
}
/*==============================
2 name:shell sort
--------------------------------
time complexity:
worst average best
O(ns) O(nlogn) O(n)
1 &a,int d)
{
int i=d;
while(i=j)
{
a[k]=a[k-d];
k=k-d;
}
a[j]=temp;
break;
}
j=j+d;
}
i=i+d;
}
return;
}
void shell_sort(std::vector &a)
{
int d=STEP;
while(d!=0)
{
shell_sort_assist(a,d);
d/=2;
}
return;
}
/*==============================
3 name:simple sort
--------------------------------
time complexity:
worst average best
O(n^2) O(n^2) O(n^2)
--------------------------------
space complexity:
O(1)
--------------------------------
stability:
unstable
==============================*/
void simple_sort(std::vector &a)
{
std::vector::iterator it=a.begin(),it1,saveit;
for(;it!=a.end();it++)
{
int min=*it;
saveit=it;
it1=it;
while(it1!=a.end())
{
if(min>*it1)
{
min=*it1;
saveit=it1;
}
it1++;
}
if(saveit!=it)
{
std::swap(*it,*saveit);
}
}
return;
}
/*==============================
4 name: merge sort
--------------------------------
time complexity:
worst average best
O(nlogn) O(nlogn) O(nlogn)
--------------------------------
space complexity:
O(n)
--------------------------------
stability:
stable
==============================*/
void merge(std::vector &s,int b,int m,int e)
{
int* temp=new int[e-b+1];
int i=b;
int j=m+1;
int k=0;
while(is[j])
{
temp[k++]=s[j++];
}
else
{
temp[k++]=s[i++];
}
}
if(i &s,int b,int e)
{
int m;
if(e>b)
{
m=(b+e)/2;
merge_sort(s,b,m);
merge_sort(s,m+1,e);
merge(s,b,m,e);
}
return;
}
/*==============================
5 name: insert sort
--------------------------------
time complexity:
worst average best
O(n^2) O(n^2) O(n)
--------------------------------
space complexity:
O(1)
--------------------------------
stability:
stable
==============================*/
void insert_sort(std::vector& a)
{
std::vector::iterator it,it1,it2;
int temp;
it=a.begin();
while(it!=a.end())
{
it1=a.begin();
while(it1!=it)
{
if(*it &a,int i,int end)
{
int lchild=2*i;
int rchild=2*i+1;
int max=i;
if(rchilda[max])
{
max=lchild;
}
if(a[rchild]>a[max])
{
max=rchild;
}
if(max!=i)
{
std::swap(a[max],a[i]);
heap_adjust(a,max,end);
}
}
}
void build_heap(std::vector &a)
{
int size=a.size()-1;
for(int i=size/2;i>0;i--)
{
heap_adjust(a,i,size);
}
return;
}
void heap_sort(std::vector &a)
{
build_heap(a);
for(int i=a.size()-1;i>0;i--)
{
std::swap(a[1],a[i]);
heap_adjust(a,1,i-1);
}
}
/*==============================
7 name: fast sort
--------------------------------
time complexity:
worst average best
O(n^2) O(nlogn) O(nlogn)
--------------------------------
space complexity:
O(logn)
--------------------------------
stability:
unstable
==============================*/
void fast_sort(std::vector &a,int start,int end)
{
int med=a[start];
int i=start;
int j=end;
while(j>i)
{
while(a[j]>=med && j>i)
{
j--;
}
a[i]=a[j];
while(a[i]<=med && j>i)
{
i++;
}
a[j]=a[i];
}
a[i]=med;
if(start &a)
{
std::vector<:vector>> bucket;
bucket.resize(10);
std::vector::iterator it=a.begin();
while(it!=a.end())
{
int idx=*it/10;
bucket[idx].push_back(*it);
it++;
}
std::vector<:vector>>::iterator it1=bucket.begin();
while(it1!=bucket.end())
{
simple_sort(*it1);
it1++;
}
it=a.begin();
it1=bucket.begin();
while(it!=a.end() && it1!=bucket.end())
{
std::vector::iterator tmp_it=(*it1).begin();
while(tmp_it!=(*it1).end())
{
*it=*tmp_it;
tmp_it++;
it++;
}
it1++;
}
}
/*==============================
9 name: radix sort
--------------------------------
time complexity:
average
O(2dn)
--------------------------------
space complexity:
O(n)
--------------------------------
stability:
stable
==============================*/
void refresh_data(std::vector &a, std::vector<:vector>> &sto)
{
std::vector::iterator it,it1;
std::vector<:vector>>::iterator it2;
it=a.begin();
it2=sto.begin();
while(it!=a.end() && it2!=sto.end())
{
it1=(*it2).begin();
while(it1!=(*it2).end())
{
*it=*it1;
it1++;
it++;
}
(*it2).clear();
it2++;
}
return;
}
//suppose:there are no minus number
void radix_sort(std::vector &a)
{
std::vector<:vector>> sto;
sto.resize(10);
int max=0;
std::vector::iterator it=a.begin();
while(it!=a.end())
{
int idx;
if(max