希尔排序、归并排序、快速排序、计数排序、基数排序、睡眠排序、猴子排序

本文主要介绍了希尔排序、归并排序和快速排序的实现思想、时间复杂度、空间复杂度及稳定性。希尔排序的时间复杂度在最优情况下为O(n^1.3),归并排序稳定且时间复杂度为O(n^logn),快速排序在平均情况下时间复杂度为O(n^logn)。此外,还提到了快速排序的改进方法,包括调整基准值选取和在小规模时转为插入排序。
摘要由CSDN通过智能技术生成

        本文将介绍七大排序算法的三种,其中另外四种见博客冒泡排序、选择排序、插入排序、堆排序,其中本文用到的两个数的交换函数也在该博客中有介绍。

1.希尔排序

(1)实现思想:


(2)时间复杂度:取决于步长序列,若使用希尔序列:N/2,N/4,N/8.......1,时间复杂度为O(n^2);若选择一个最优序列,可达到O(n^1.3)

(3)空间复杂度:O(1)

(4)稳定性:不稳定排序

(5)实现代码:

//5.希尔排序:分组式的插入排序
//定义一个初始步长(下标间隔)gap,按步长将待排序数列分组
//将分好的组,每组插入排序,然后gap--
//重复以上步骤,直至gap=0
//N/2,N/4,N/8...希尔序列,时间复杂度为O(N)
void ShellSort(int arr[], size_t size)
{
    if(size <= 1)
        return;
    int64_t gap = size/2;//使用希尔序列
    //1.第一重循环,生成步长序列
    for(; gap>0; gap /= 2)
    {
        //2.第二重循环,进入插入排序
        //此循环的执行顺序,相当于先处理第一组的第一个
        //再处理第二组的第一个....
        //再第二组的第一个....
        int64_t bound = gap;//此处相当于插入排序中的bound=1
        for(; bound<size;++bound)
        {
            int bound_value = arr[bound];//待插入元素
            //3.第三重循环,线性表的搬运(一边找一边搬运)
            int64_t cur = bound;
            for(; cur>=gap;cur -= gap)//cur-=gap是为了找到同组元素的上一个元素
            {
                if(arr[cur-gap] > bound_value)//进行搬运
                    arr[cur] = arr[cur-gap];
                else//找到了合适的插入位置
                    break;                                                                                                                            
            }
            arr[cur] = bound_value;
        }
    }
}

2. 归并排序

(1)实现思想:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值