当前位置: 首页 > news >正文

手机怎么制作网站教程视频犀牛云做网站怎么样

手机怎么制作网站教程视频,犀牛云做网站怎么样,东营房产信息网官网,设计网站建设合同书什么是快速排序?快速排序(Quick Sort)是一种高效的排序算法,采用"分治"策略。它的核心思想是:选择一个基准值(pivot),将数组分成两部分,一部分比基准值小&…

什么是快速排序?

快速排序(Quick Sort)是一种高效的排序算法,采用"分治"策略。它的核心思想是:选择一个基准值(pivot),将数组分成两部分,一部分比基准值小,另一部分比基准值大,然后递归地对这两部分进行排序。

为什么选择前后指针法?

在快速排序的几种实现方法中(Hoare版本、前后指针、挖坑法),前后指针法相对容易理解。

前后指针法思路

  1. 选择最左边的元素作为基准值(key)
  2. 定义两个指针:prev(慢指针)和cur(快指针)
  3. cur先移动,如果cur指向的元素小于key,prev就前进并交换prev和cur指向的元素
  4. 当cur走到数组末尾,将key与prev指向的元素交换
  5. 递归处理key左边和右边的子数组

C语言实现代码

#include <stdio.h>// 交换两个元素的值
void swap(int *a, int *b) {int temp = *a;*a = *b;*b = temp;
}// 快速排序函数
void quickSort(int arr[], int left, int right) {// 递归终止条件:子数组长度小于等于1if (left >= right) {return;}// 选择最左边的元素作为基准值int key = arr[left];int prev = left;  // 慢指针int cur = left + 1;  // 快指针// cur移动,prev跟随while (cur <= right) {// 如果cur指向的元素小于基准值if (arr[cur] < key) {prev++;  // prev前进swap(&arr[cur], &arr[prev]);  // 交换cur和prev指向的元素}cur++;  // cur总是前进}// 将基准值放到正确位置swap(&arr[left], &arr[prev]);// 递归排序左右子数组quickSort(arr, left, prev - 1);quickSort(arr, prev + 1, right);
}// 打印数组
void printArray(int arr[], int size) {for (int i = 0; i < size; i++) {printf("%d ", arr[i]);}printf("\n");
}int main() {int arr[] = {10, 7, 8, 9, 1, 5};int n = sizeof(arr) / sizeof(arr[0]);printf("原始数组: ");printArray(arr, n);quickSort(arr, 0, n - 1);printf("排序后数组: ");printArray(arr, n);return 0;
}
  1. swap函数:用于交换两个元素的值,是排序中常用的操作。

  2. quickSort函数

    • leftright表示当前要排序的子数组的左右边界
    • 选择最左边的元素作为基准值key
    • prev从基准值后一个位置开始,curprev的下一个位置开始
    • cur向前移动,如果遇到比key小的元素,prev就前进并交换prevcur指向的元素
    • cur走到数组末尾,将keyprev指向的元素交换
  3. 递归:将数组分成两部分,分别对左右子数组递归调用quickSort

快速排序的执行过程(以10, 7, 8, 9, 1, 5为例)

  1. 选择10作为基准值
  2. 从左到右遍历:7、8、9都比10小,1和5也比10小
  3. 遍历完成后,10应该放在第5个位置(索引4)
  4. 交换10和1,得到[1, 7, 8, 9, 10, 5]
  5. 递归排序[1, 7, 8, 9]和[5]

时间复杂度

最佳情况:O(n log n) - 每次都能将数组分成两个相等的子数组

最坏情况:O(n²) - 数组已经基本有序,每次只能减少一个元素

平均情况:O(n log n)。

1.递归的终止条件if (left >= right)很重要,避免无限递归。

2.注意cur的边界条件,要小于等于right

3.基准值的选择影响排序效率,这里选择最左边的元素是简化实现

http://www.dtcms.com/a/570340.html

相关文章:

  • 苏州建设网站wordpress页面编辑插件
  • 学习Java第五十九天——MySQL篇
  • 公司网站搭建费用用上网做任务的网站
  • 甘肃省城乡与建设厅网站首页关键词是在网站后台做的吗
  • 营销印刷网站wordpress模板网站标题重复
  • 室内空间设计网站推荐开网店需要什么准备
  • 烟台城乡建设学校网站开发公司支付前期物业开办费包括哪些内容
  • 【仓颉纪元】仓颉三方库适配深度实战:7 天打通 SQLite 生态壁垒
  • 电源完整性07-如何确定PDN网络中的大电容
  • Java - 使用虹软人脸识别sdk记录
  • 江门网页建站模板慧算账代理记账公司
  • 做非法网站宿迁558网络专业做网站
  • 长沙销售公司 网站余姚的网站建设
  • 网站建设服务商排行wordpress主题没法用
  • 贵港网站建设培训wordpress event calendar
  • 室内装饰公司网站模板贵州新农村建设专业网站
  • 北京网站开发优选ls20227医院网站建设系统
  • 厦门专门建设网站的公司深圳微信商城网站设计联系电话
  • MCU单片机TWS耳机充电盒系统控制方案
  • 8.DSP学习记录之ePWM
  • 钓鱼网站在线下载国外有没有做问卷调查的网站
  • 住房城乡住房和城乡建设部网站首页如何做好一个企业网站设计
  • 旅游景区英文网站建设研究大神自己做的下载音乐的网站
  • 网站上传不了照片做网站的模板
  • 怎么做微信辅助的网站海淀重庆网站建设
  • 做网上贸易哪个网站好网络推广员的工作内容
  • PostIn零基础学习 - 如何使用接口Mock尽早满足前端开发需求
  • 【大模型学习路线】2025最新大模型技术学习路线:从入门到精通,看这一篇就够了
  • 找人建设网站西安seo培训哪个好
  • SpringMVC web开发入门