更多课程 选择中心

C/C++培训
达内IT学院

400-996-5531

C++排序实现代码有哪些?

  • 发布:C++培训
  • 来源:C++资讯
  • 时间:2020-06-01 15:46

大家在学习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); //将剩下的元素继续调整,最后变成由小到大的顺序

}

}

版权声明:转载文章来自公开网络,版权归作者本人所有,推送文章除非无法确认,我们都会注明作者和来源。如果出处有误或侵犯到原作者权益,请与我们联系删除或授权事宜。

预约申请免费试听课

填写下面表单即可预约申请免费试听!怕钱不够?可就业挣钱后再付学费! 怕学不会?助教全程陪读,随时解惑!担心就业?一地学习,可全国推荐就业!

上一篇:C++编译/编辑器对OIer的必要功能
下一篇:5 月编程语言排行榜:C 重回第一!

C语言宏定义的几种使用方法

C与C++内存管理避坑指南

C/C++代码规范注释有哪些讲究?

C语言中,全局变量滥用的后果竟如此严重?

Copyright © 2023 Tedu.cn All Rights Reserved 京ICP备08000853号-56 京公网安备 11010802029508号 达内时代科技集团有限公司 版权所有

选择城市和中心
黑龙江省

吉林省

河北省

湖南省

贵州省

云南省

广西省

海南省