C++各种常见排序算法

本文详细介绍了C++中常见的七种排序算法:冒泡排序、插入排序、希尔排序、选择排序、堆排序、快速排序和归并排序。通过实例解析每种排序算法的工作原理和实现代码,帮助读者深入理解各种排序算法的细节。
摘要由CSDN通过智能技术生成

1.冒泡排序

<1>冒泡排序的本质在于每一趟循环从数组的头走到尾找到最大的值放在最右边,下一次循环继续从剩下的n-1个数中寻找最大值放到最右边。直到剩下最后俩个数比较交换后结束。

<2>比较方式也简单易懂,拿升序为例,用a[i]与a[i+1]比较,如果a[i]>a[i+1],swap(a[i],a[i+1]),当然,如果10个数进行排序,比较九次就可以确定这十个数中的最大值。简单的代码实现如下:
void BubbleSort(int* a,int size)
{
assert(a);
for (int i = 0; i < size - 1; i++)
{
for (int j = 0; j < size - 1 - i; j++)
{
if (a[j]>a[j + 1])
swap(a[j], a[j + 1]);
}
}

2.插入排序

<1>插入排序的思想自然就是以插入为主,当然最主要的排序思路必然是先单趟再进行循环,第一步先掌握单趟排序的过程。插入排序每一趟将当前位置的数调整到新的有序序列当中。
<2>如果俩个数进行排序,以升序为例 2 , 1 用第一个数与第二个数进行比较,实现保存好第二个位置的值 temp=a[end+1],将大的值赋给a[second],如果事先没有存好第二个位置的值的话此时就找不到原本第二个位置的值了。接下来要做的自然就是a[end]=temp, 这样就完成了俩个数的排序。
<3>但是多个数进行排序的时候如:3,4,5,1,2 进行排序的时候,当进行到第三个数的时候,此时i=end=2,当 2 与 1 交换以后,–end,end<0时循环结束,整个过程就是,1与5比较以后1到了5的位置,1再与4进行比较交换,再与3 进行比较交换,此时end<0,循环结束,完成这一趟排序。
<4>由上可知,我们需要进行n-1躺上述排序,整体代码如下:
void InsertSort(int*a, int size)//插入排序
{
assert(a);
for (int i = 0; i < size - 1; i++)
{
int end = i;
int temp = a[end + 1];
while (end >= 0)
{
if (a[end]>temp)
{
a[end + 1] = a[end];
end–;
}
else
{
break;
}
}
a[end + 1] = temp;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值