插一下小孱弱弱總結的十個排序算法,今天分享前五個。思想無比重要哦!!
#include <iostream>
#include <cstdlib>
#include <windows.h>
#include <time.h>
using namespace std;
#define MAXN 10
typedef struct
{
int r[MAXN+1];
int length;
}SqList;
void swap(SqList *L,int i,int j)
{
int temp=L->r[i];
L->r[i]=L->r[j];
L->r[j]=temp;
}
//一、冒泡算法 平均時間複雜度O(n^2) 最壞時間複雜度O(n^2)
//空間複雜度 O(1) 穩定
//1.1冒泡思想
void BubbleSort1(SqList *L)
{
int i,j;
for(i=1;i<L->length;i++)
for(j=i+1;j<L->length;j++)
{
if(L->r[i]>L->r[j])
swap(L,i,j);
}
}
//1.2冒泡算法*
void BubbleSort2 (SqList *L)
{
int i,j;
for(i=1;i<L->length;i++)
for(j=L->length-1;j>=i;j--)
{
if(L->r[j]>L->r[j+1])
swap(L,j,j+1);
}
}
//1.3冒泡改進
void BubbleSort3(SqList *L)
{
int i,j;
bool flag=true;
for(i=1;i<L->length&&flag;i++)
{
flag=false;
for(j=L->length-1;j>=i;j--)
{
if(L->r[j]>L->r[j+1])
{
swap(L,j,j+1);
flag=true;
}
}
}
}
//二、選擇排序 平均時間複雜度O(n^2) 最壞時間複雜度O(n^2)
//空間複雜度 O(1) 數組不穩定 鏈表穩定
void SelectSort(SqList *L)
{
int i,j,min;
for(i=1;i<L->length;i++)
{
min=i;
for(j=i+1;j<=L->length;j++)
{
if(L->r[min]>L->r[j])
min=j;
}
if(i!=min)
swap(L,i,min);
}
}
//三、插入排序 平均時間複雜度O(n^2) 最壞時間複雜度O(n^2)
//空間複雜度 O(1) 穩定
void InsertSort(SqList *L)
{
int i,j;
for(i=2;i<=L->length;i++)
{
if(L->r[i]<L->r[i-1])
{
L->r[0]=L->r[i];
for(j=i-1;L->r[j]>L->r[0];j--)//插入位置之後的元素向後移動一位
L->r[j+1]=L->r[j];
L->r[j+1]=L->r[0];
}
}
}
//四、希爾排序 平均時間複雜度O(n*logn) 最壞時間複雜度O(n^2)
//空間複雜度 O(1) 不穩定
void ShellSort(SqList *L)
{
int i,j;
int increment=L->length;
do
{
increment=increment/3+1;//增量序列
for(i=increment+1;i<=L->length;i++)
{
if(L->r[i]<L->r[i-increment])
{
L->r[0]=L->r[i];
for(j=i-increment;j>0&&L->r[0]<L->r[j];j-=increment)
L->r[j+increment]=L->r[j];
L->r[j+increment]=L->r[0];
}
}
}
while(increment>1);
}
//五、堆排序 平均時間複雜度O(n*logn) 最壞時間複雜度O(n*logn)
//空間複雜度 O(1) 不穩定
//堆調整函數
void HeapAdjust(SqList *L,int s,int m)
{
int temp,j;
temp=L->r[s];
for(j=2*s;j<=m;j*=2)
{
if(j<m&&L->r[j]<L->r[j+1])
j++;
if(temp>=L->r[j])
break;
L->r[s]=L->r[j];
s=j;
}
L->r[s]=temp;
}
//堆排序(遞歸方法)
void HeapSort(SqList *L)
{
int i;
for(i=L->length/2;i>0;i--)
HeapAdjust(L,i,L->length);
for(i=L->length;i>1;i--)
{
swap(L,1,i);
HeapAdjust(L,1,i-1);
}
}
int main ()
{
SqList sq;
srand(time(NULL));
sq.length=10;
for(int i=1;i<sq.length;i++)
{
sq.r[i]=rand()%100+1;
}
//BubbleSort1(&sq);
//BubbleSort2(&sq);
//BubbleSort2(&sq);
//SelectSort(&sq) ;
//InsertSort(&sq);
//ShellSort(&sq);
HeapSort(&sq);
for(int i=1;i<sq.length;i++)
{
cout<<sq.r[i]<<' ';
}
return 0;
}