北航计算机软件技术基础课程作业&笔记【5】

本文介绍了四种基本排序算法:快速排序、插入排序、选择排序和冒泡排序。详细阐述了每种排序算法的核心思路,并提供了具体的实现代码。通过示例展示了算法的执行过程,帮助读者理解排序原理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目

(文章一周后公开~)

sort

1.快排算法

  • 核心思路:选取(一般是)当前数组第一个元素作为中间值mid,将数组按照比mid小/大分为两半,再对子数组进行同样操作(二叉树前序遍历)

  • 具体操作:主要是分2半那里,可以巧妙一些地来遍历,所以用到了left和right指针(重合时就遍历完了),同时自己写的时候用了一下right_flag表示是否要看右边与mid做比较(网上有更好的,我只是自己这样写了而已)

  • 左右指针的使用规则:假设以先将right与mid值对比开始,发生了交换后,就改变判断的指针(比如right小于mid,那么交换right与left,后面就开始判断left与mid的大小关系了),否则,一直移动被判断的指针(比如right一直大于mid,那一直right--)

  • 代码:

    #include <iostream>
    #include <vector>
    #include <iterator> 
    std::vector<int> origin{78,31,46,22,81,12,55,64,8,17};
    void quick_sort(int left, int right)
    {
    
        if(left >= right)
            return;
        // 直接记录下来,懒得把数组分小了
        int start = left,end = right;
        // 确定好中间位置的值
        int mid = origin.at(left);
        std::cout << mid <<std::endl;
        // 先从右边开始看
        int right_flag = 1;
        // 结束时因为left=right,这就是mid元素应该放的地方
        while(left < right)
        {   
            if(right_flag)
            {
                if(origin.at(right) < mid)
                {
                    // 右边比左大,那就右边往左边放
                    std::swap(origin[left],origin[right]);
                    lef
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

robinbird_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值