C/C++培训
达内IT学院
400-996-5531
大家在学习C++时,很定要学习的就是排序,那么对于排序代码你知道多少呢?本文主要介绍了C++的几种排序实现代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要学习的朋友随着小编来一起学习学习吧!
直接插入排序
void InsertSort(int r[])
{
int n = sizeof(r) / sizeof(r[0]);
for(int i = 1; i < n; ++i)
{
for(int j = i - 1; j >= 0; --j)
{
if(r[j+1] < r[j])
{
int s = r[j+1];
r[j+1] = r[j];
r[j] = s;
}
}
}
}
折半插入排序
void BinInsertSort(int r[])
{
int n = sizeof(r) / sizeof(r[0]);
for(int i = 1; i < n; ++i)
{
int s = r[i];
int low = 0;
int high = i - 1;
while(low <= high)
{
int mid = (low + high) / 2; //mid位置为要找的数
if(s < r[mid])
high = mid - 1;
else
low = mid + 1;
}
for(int j = i - 1; j >= high + 1; --j) //high+1即mid,执行数的后移,直到mid的数后移
r[j+1] = r[j];
r[high+1] = s; //mid位置就存放本身
}
}
希尔排序
void ShellSort(int r[])
{
int n = sizeof(r) / sizeof(r[0]);
int step = n / 2;
while(step >= 1)
{
for(int i = step; i < n; ++i)
{
for(int j = i - step; j >= 0; j -= step)
{
if(r[j+step] < r[j])
{
int s = r[j+step];
r[j+step] = r[j];
r[j] = s;
}
}
}
step /= 2;
}
}
直接选择排序
void SelectSort(int r[])
{
int n = sizeof(r) / sizeof(r[0]);
for(int i = 0; i < n - 1; ++i)
{
int samll = i;
for(int j = i + 1; j < n; ++j)
{
if(r[small] > r[j])
samll = j;
}
if(small != i)
{
int s = r[i];
r[i] = r[small];
r[small] = s;
}
}
}
堆排序
void HeapAdjust(int r[]; int i; int j) //调整堆
{
int child = 2 * i;
int s = r[i]; //s临时存放结点数据
while(child <= j)
{
if(child < j && r[child+1] > r[child]) //比较2个子树
++child;
if(s >= r[child]) //结点与大子树比较
break;
r[child/2] = r[child]; //如果大子树比结点大,互换
child = 2 * child; //继续向子树检索
}
r[child/2] = s; //结点的数为最大的数
}
void HeapSort(int r[]) //建堆
{
int n = sizeof(r) / sizeof(r[0]);
for(int i = n / 2 - 1; i >= 0; --i) //只有n/2-1前的下标才有子树
{
HeapAdjust(r, i, n - 1); //构造大顶堆,结点都比子树大,最后根节点为最大的数
}
for(int i = n - 1; i > 0; --i)
{
//将当前堆顶元素与当前堆尾元素互换,即将最大的数移到末尾
int s = r[0];
r[0] = r[i];
r[i] = s;
HeapAdjust(r, 0, i -1); //将剩下的元素继续调整,最后变成由小到大的顺序
}
}
版权声明:转载文章来自公开网络,版权归作者本人所有,推送文章除非无法确认,我们都会注明作者和来源。如果出处有误或侵犯到原作者权益,请与我们联系删除或授权事宜。
填写下面表单即可预约申请免费试听!怕钱不够?可就业挣钱后再付学费! 怕学不会?助教全程陪读,随时解惑!担心就业?一地学习,可全国推荐就业!
Copyright © 京ICP备08000853号-56 京公网安备 11010802029508号 达内时代科技集团有限公司 版权所有
Tedu.cn All Rights Reserved