排序——交换排序技术
交换排序的基本思想是:排序表中两个记录关键码的进行比较,若与排序要求相逆,则将二者进行交换知道没有反序的记录为止。
1、冒泡排序
设排序表为R[1]……R[n],对n个记录的排序表进行冒泡排序(Bubble Sort)的过程是:第1趟,从第1个记录开始到第n个记录,对n-1对相邻的两个记录关键码进行比较,若与排序法要求相逆则将二者交换。这样一趟之后,具有最大关键码的记录交换到了R[n];第2趟从第1个记录开始到第n-1个记录继续进行第2趟冒泡,两趟之后具有次最大关键码的记录交换到了R[n-1]……,如此重复,n-1趟后在R[1]……R[n]中,n个记录按关键码有序。
冒泡排序最多进行n-1趟,在某趟的两两比较过程中如果一次交换都未发生表明已经有序,则排序提前结束。其具体算法如下:
如果一次交换都没有发生,swap一直是0,说明全部有序,可以结束排序。具体应用例子: https://www.nowcoder.com/practice/5190a1db6f4f4ddb92fd9c365c944584tpId=37&tags=579&title=&difficulty=3&judgeStatus=0&rp=1&sourceUrl=%2Fexam%2Foj%2Fta%3FtpId%3D37。
2、快速排序
快速排序的核心操作是划分 。以某个记录为标准(也称为支点),通过将待排序划分成两组,其中一组中的记录的关键码均大于或等于支点记录的关键码,另一组中的所有记录的关键码小于支点记录的关键码则支点记录就放在两组之间。这也是该记录的最终位置,再对各部分继续划分知道整个序列按关键码有序。
快速排序的划分思想如下:
设置两个搜索指针low和high是只是待划分区域的两个端点,从high位置开始向前搜索比支点小的记录,并将其交换到low位置处,同时low向后移动一个位置;然后从low位置开始向后搜索比支点大(等于)的记录,并将其交换到high位置处,high向前移动一个位置。如此继续,直到low和high相等,这表明low前面的都比支点小,high后面的都比支点大,low和high指的这个位置就是支点的最后位置。为了减少数据的移动,先把支点记录缓存起来最后再置入最终的位置。
例:对排序表“49 14 38 74 96 65 8 49 55 27”进行划分快速排序,其中49为支点,过程图示如下:
具体划分算法如下:
快速排序算法如下:
该递归过程可用二叉树呈现:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?