排序算法C++实现(一)
主要实现冒泡排序、简单选择排序、直接插入排序和希尔排序法。前三者的时间复杂度都为O(n2),希尔排序作为插入排序法的一种,其在内部进行分组,使得时间复杂度为O(nlogn)。
运行结果:
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
void exchange(int &a, int &b);
void test01(int a,int b);
void print(vector<int> input);
vector<int> sort1(vector<int> input);
vector<int> select_sort(vector<int> input);
vector<int> InsertSort(vector<int> input);
vector<int> Shellsort(vector<int> input);
void exchange(int &a, int &b)
{
int temp = a;
a = b;
b = temp;
}
void test01(int a,int b)
{
cout<<a<<" "<<b<<" "<<endl;
exchange(a,b);
cout<<a<<" "<<b<<" "<<endl;
}
void print(vector<int> input)
{
for(int i = 0;i<input.size();++i)
{
cout<<input[i]<<' ';
}
cout<<endl;
}
vector<int> sort1(vector<int> input)
{
int len = input.size();
for(int i = 0;i<len;++i)
{
for(int j = len-1;j>i;--j)
{
if(input[j-1]>input[j])
exchange(input[j-1],input[j]);
}
}
return input;
}
vector<int > select_sort(vector<int> input)
{
int i = 0, j = 0, len = input.size(), min = 0;
for( i =0; i < len;++i)
{
min = i;
for( j = i + 1; j < len;++j )
{
if(input[j]<input[min])
min = j;
}
if(i!=min)
exchange(input[i],input[min]);
}
return input;
}
vector<int> InsertSort(vector<int> input)
{
int len = input.size();
int temp = 0;
int i = 0,j = 0;
for(i = 1;i<len;++i)
{
if(input[i]<input[i-1])
{
temp = input[i];
for(j = i-1;j>=0;j--)
{
if(temp<input[j])
input[j+1] = input[j];
else
break;
}
input[j+1] = temp;
}
}
return input;
}
vector<int> Shellsort(vector<int> input)
{
int len = input.size();
int gap = len;
int temp = 0;
int i = 0,j = 0;
do{
gap /=3;
gap += 1;
for(i = gap +1;i<len;++i)
{
if(input[i]<input[i-gap])
{
temp = input[i];
for(j = i-gap;j>=0;j-=gap)
{
if(temp<input[j])
input[j+gap] = input[j];
else
break;
}
input[j+gap] = temp;
}
}
}while(gap>1);
return input;
}
int main()
{
int input[] = {90,11,5,8,13,7,4,6,2};
vector<int> Input;
for(int i = 0;i<9;++i)
{
Input.push_back(input[i]);
}
Input = Heapsort(Input);
print(Input);
cout<<"/****************利用自带的数据结构进行堆排序*************************/"<<endl;
priority_queue<int, vector<int>, less<int> > a;
priority_queue<int, vector<int>, greater<int> > b;
for(int i = 0;i<9;++i)
{
a.push(input[i]);
b.push(input[i]);
}
while(!a.empty())
{
cout<<a.top()<<' ';
a.pop();
}
cout<<endl;
while(!b.empty())
{
cout<<b.top()<<' ';
b.pop();
}
}
|