基本的排序算法
直接插入排序
O(n2) ,稳定
void InsertSort(int r[],int n)
{
int i,j,s;
for(i=1;i<n;++i)
{
s=r[i]; //s作为一个哨兵
j=i-1; //从后往前
while(s<r[j])
{
r=[j+1]=r[j]; //后移比s大的
--j;
}
r[j+1]=s; //将s插入
}
}
希尔排序
O(nlogn2) - O(n2) 之间,不稳定
void shellsort(int r[],int n)
{
int d,i,j,s;
d=n/2; //第一个步长
while (d>=1)
{
for(i=d;i<n;++i)// 直接插入排序
{
s=r[i];
j=i-d; //直接插入是i-1
while(j>=0&&s<r[j])
{
r[j+d]=r[j];
j=j-d; //直接插入是j-1
}
r[j+d]=s;
}
d=d/2; //步长变化
}
}
直接选择排序
O(n2) ,不稳定
void SelectSort(int r[],int n)
{
int i,j,s;
for(i=0;i<n;++i) //做n次排序
{
for(j=i+1;j<n;++j) //i和之后的一一比较
{
if(r[j]<r[i])
{
s=r[i];
r[i]=r[j];
r[j]=s;
}
}
}
}
堆排序
待续。。。
这里写代码片