数据结构_快排part1_2021.6.19

本文介绍了快速排序的基本思想和核心操作,它是通过一趟排序将数据分为两部分,并递归地对每一部分进行排序,达到整体有序。代码示例展示了快速排序的实现过程,包括Partition函数的使用。此外,还提到了快速排序在最优和最坏情况下的时间复杂度分别为O(nlogn)和O(n^2)。

数据结构与算法|快速排序整理part1


选题想写了挺多,但最近要期末考试了QAQ,数据结构慌得一批,在不整理就die了。结合本周的实验课,挑选了一个排序看了看《大话数据结构这本书》进行简单整理一部分。ヾ(◍°∇°◍)ノ゙也算是第一次技术性的文档,第一次废话多了一点hhh,慢慢改进⁄(⁄ ⁄•⁄ω⁄•⁄ ⁄)⁄

参考书:《大话数据结构》 程杰著

1.啥叫快速排序?

1.1 快速排序背景

我们的数据结构老师曾说过,这一章其他排序可以懵逼,但是这个快速排序必须得会!为啥呢?因为“快”哈哈哈哈哈,主要还是原理简单应用广。曾被列为“20世纪十大算法之一”
相对于其他排序:
①希尔排序————直接插入排序pro
②简单选择排序————选择排序pro
快速排序————冒泡排序pro(交换排序)

1.2 快速排序核心

核心的点在于两个词比较交换来实现排序,快速排序主要增加了比较和交换的距离,类似于直接快到位了,而不是轮番移动,从而达到减少次数的功能。

2.快速排序的具体原理

2.1基本思想

基本思想主要为:通过一趟排序将待排的记录分割为独立的两部分,其中的一部分记录的关键字均比另外一部分记录的关键字,可分别两部分继续进行排序,已达到整个序列有序的目的。

2.2代码实现
/*对顺序表L快速排序*/
 void QuickSort(SqList *L){
     QSort(L,1,L->length)
 }


 /*对顺序L中的子序列L->r[low..high]作快速排序*/
 void QSort(SqList *L,int low,int high){
     int pivot;
     if(low<high){
         pivot=Partition(L,low,high); //L->r[low..high]分成两部分
         QSort(L,low,pivot-1);  //高的部分递归排序
         QSort(L,pivot+1,high);  //低的递归排序
     }
 }


 /*交换顺序表L中字标的记录,使pivot的记录到位,返回其所在的位置*/
 /*pivot前不大于它,后不小于它*/
 int Partition(SqList *L,int low,int high){
     int pivotkey;   
     pivotkey=L->r[low];  //第一个是轴
     while(low<high){
         while(low<high&&L->r[high]>=pivotkey)
          high--;
         swap(L,low,high);   //记录小的再低
         while(low<high&&L->r[low]<=pivotkey)
          low++;
         swap(L,low,high)     //记录大的在高
     }
     return low;     //返回枢纽在的位置
 }

3.快速排序复杂度分析

在最优的情况下,快速排序的算法的时间复杂度是O(nlogn);
最坏,为O(n^2).

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值