【数据结构】十二、八种常用的排序算法讲解及代码分享

目录

一、插入排序

1)算法思想

2)代码

二、希尔排序

1)算法思想

2)代码

三、选择排序

1)算法思想

2)代码

四、堆排序

1)什么是最大堆

2)如何创建最大堆

3)算法思想

4)代码

五、冒泡排序

1)算法思想

2)代码

六、快速排序

1)算法思想

2)代码

七、归并排序

1)算法思想

2)代码

八、基数排序/桶排序(只对整数类型有效)

1)算法思想

2)代码


一、插入排序

1)算法思想

插入排序即将一个无序的元素集合中的元素一个个插入到子集合中合适的位置,直到原集合中的元素全部加入到子集合中。

2)代码

//插入排序
void Insert_Sort(DataType a[], int n)
{
    DataType temp;
    for (int i = 0; i < n - 1; i++)   //0 到 i 的数据已排序好
    {
        temp = a[i + 1];
        int j = i;
        while (j >= 0 && a[j] > temp) //如果是小于号则递减排序,如果是大于号则递增排序
        {
            a[j + 1] = a[j];
            j--;
        }
        a[j+1] = temp;
    }
}

二、希尔排序

1)算法思想

希尔排序算是插入排序的进阶版本,先把待排序的元素分为若干个小组,然后对每个小组进行插入排序

这里的“增量(span)”代表将相邻span的元素分为一组,span的取值一般取n/2

2)代码

//希尔排序
void Shell_Sort(DataType a[], int n)
{
    int span = n / 2;
    DataType temp;
    while (span > 0)
    {
        for (int i = 0; i < span; i ++)  //将数组分为span个小组
        {
            //对各组进行插入排序
            for (int k = i; k < n - span; k += span)
            {
                temp = a[k + span];
                int j = k;
                while (j >= 0 && a[j] > temp)
                {
                    a[j + span] = a[j];
                    j -= span;
                }
                a[j + span] = temp;
            }
        }
        span /= 2;
    }
}

三、选择排序

1)算法思想

每次从待排序的集合中选择最小(或最大)的元素放到集合的最前面,元素集合不断缩小,当待排序集合为空时代表排序结束。

2)代码

//选择排序
void Select_Sort(DataType a[], int n)
{
    DataType temp;
    for (int i = 0; i < n; i++)
    {
        DataType min = a[i];
        int k = i;
        for (int j = i; j < n; j++)
        {
            if (a[j] < min)
            {
                min = a[j];
        
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值