插入排序
void insertSort(int a[],int n)
{
for(int i=1;i<n;i++)
{
for(int j=i;j>0;j--)
{
if(a[j]>a[j-1])
{
swap(a,j,j-1);
}else{
break;
}
}
}
}
选择排序
void selectSort(int a[],int n)
{
for(int i=0;i<n-1;i++)
{
int smallest = i;
for(int j=i+1;j<n;j++)
{
if(a[j]<a[smallest])
smallest = j;
}
swap(a,smallest,i);
}
}
冒泡排序
void BubbleSort(int a[],int n)
{
for(int i=0;i<n-1;i++)
{
for(int j=n-1;j>i;j--)
{
if(a[j]<a[j-1])
swap(a,j,j-1);
}
}
}
堆排序
void sift(int r[],int k,int m)//调整k节点元素
{
int i,j,temp;
i=k;//当前节点
j=2*i;//子节点
temp = r[i];//临时存储temp
while(j<=m)//当j没有遍历完毕
{
if(j<m&&r[j]<r[j+1])//k的子节点 取较大的那个
{
j++;
}
if(r[i]>r[j])//如果父节点比子节点大则退出循环
{
break;
}else{
r[i] = r[j];//否则使得j,i互换
i = j;//向叶端更新节点
j = 2*i;//更新子节点继续进行循环
}
r[i] = temp;
}
}
void makeHeap(int r[],int root,int last)//对所有节点自下而上执行
{
int n = last;
for(int i=n/2;i>0;i--)
{
sift(r,i,n);
}
}
void heapSort(int a[])
{
int n=6;
for(int i=1;i<=n;i++)
{
heapSort(r,1,n-i+1);
}
}
希尔排序
void ShellSort(int* a,int len)
{
int gap = len;
while(gap > 1)
{
gap = gap/3 + 1;
for(int i = gap;i < len;i++)
{
int key = a[i];
int start = i - gap;
while(start >= 0 && key <= a[start])//对当前key进行一趟直接插入排序
{
a[start+gap] = a[start];
start -= gap;
}
a[start + gap] = key;
}
}
}
基数排序
基数排序思想是对序列进行一个分类,诸位分类,直到最终有序。