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

西安网站创建百度网站推广排名

西安网站创建,百度网站推广排名,网站建设及推广费用,做二手车网站需要什么手续快速排序介绍 快速排序(QuickSort)是一种 分治法 排序算法,基本思想是通过一个 基准元素 将待排序的数组分成两部分,使得一部分元素小于基准元素,另一部分元素大于基准元素,然后递归地对这两部分进行排序。…

快速排序介绍

快速排序(QuickSort)是一种 分治法 排序算法,基本思想是通过一个 基准元素 将待排序的数组分成两部分,使得一部分元素小于基准元素,另一部分元素大于基准元素,然后递归地对这两部分进行排序。

快速排序的步骤:

  1. 选择基准:选择一个基准元素,通常是数组的第一个元素、最后一个元素或者中间的元素。

  2. 划分数组:根据基准元素,将数组分成两部分:

    • 左边部分:所有小于基准元素的元素。
    • 右边部分:所有大于基准元素的元素。
  3. 递归排序:分别对左边和右边的子数组递归进行快速排序。

代码解析:

public static void quickSort(int[] arr, int l, int r) {if (l >= r) return;  // 递归终止条件:当左右指针交叉时,停止递归int x = arr[(r - l >> 1) + l], i = l - 1, j = r + 1;  // 选择基准元素(数组中间的元素)while (i < j) {// 从左边开始,找到第一个大于等于基准元素的数while (arr[++i] < x);// 从右边开始,找到第一个小于等于基准元素的数while (arr[--j] > x);// 如果左指针小于右指针,则交换元素if (i < j) {int tmp = arr[i];arr[i] = arr[j];arr[j] = tmp;}}// 递归排序左半部分quickSort(arr, l, j);// 递归排序右半部分quickSort(arr, j + 1, r);
}

代码详解:

  1. 终止条件if (l >= r) return;
    当左指针大于或等于右指针时,说明数组已经是一个元素或者没有元素需要排序,所以递归终止。

  2. 选择基准元素int x = arr[(r - l >> 1) + l];
    这行代码选择了数组的中间元素作为基准。具体的实现方法是 (r - l >> 1) + l,这相当于 (l + r) / 2,即取数组的中间元素。

  3. 初始化指针int i = l - 1, j = r + 1;

    • i 初始化为 l - 1,指向数组的左侧。
    • j 初始化为 r + 1,指向数组的右侧。
  4. 划分过程

    • while (i < j):只要 i 小于 j,就继续交换。
    • while (arr[++i] < x);:从左到右遍历,找到第一个大于或等于基准元素的数。
    • while (arr[--j] > x);:从右到左遍历,找到第一个小于或等于基准元素的数。
    • 如果 i < j,说明需要交换这两个元素的位置,确保左边的数小于基准元素,右边的数大于基准元素。
  5. 递归排序

    • quickSort(arr, l, j);:递归对左边子数组进行排序。
    • quickSort(arr, j + 1, r);:递归对右边子数组进行排序。

示例:

假设你有一个数组 arr = {3, 2, 1, 5, 4},你想对其进行排序。

初始时,l = 0r = 4,即整个数组范围。选择基准元素为 arr[2] = 1

  1. 第一次划分

    • 选择 x = 1i = -1j = 5
    • 左指针从 0 开始,找到第一个大于等于 1 的元素 arr[0] = 3
    • 右指针从 4 开始,找到第一个小于等于 1 的元素 arr[4] = 4
    • 交换 arr[0]arr[4],得到 {4, 2, 1, 5, 3}
    • 继续调整,直到所有元素都正确划分。
  2. 递归排序

    • 递归地对左右子数组分别进行排序,直到每个子数组只有一个元素或为空,最终得到排序好的数组。

快速排序的优缺点:

  • 优点

    • 平均时间复杂度为 O(n log n),在实际应用中表现优秀。
    • 不需要额外的空间,空间复杂度为 O(log n)
  • 缺点

    • 最坏情况下时间复杂度为 O(n^2),当数组已经是有序的或者选择的基准不合适时,性能会退化。
    • 不稳定排序:相等的元素排序后可能会交换顺序。

总结:

快速排序是一个非常高效的排序算法,尤其在大多数情况下,它的表现远远优于其他简单排序算法。通过合理选择基准元素,并且利用分治法的递归思想,快速排序能在平均情况下提供 O(n log n) 的性能。

http://www.dtcms.com/wzjs/437671.html

相关文章:

  • 自助建站系统哪个最好用广东seo推广公司
  • 浙江建设信息港官网证书查询seo网站建设
  • 收藏的网站从做系统后找不到了二级不死域名购买
  • 东莞网站开发推荐网站排名优化培训课程
  • 怎么做废品网站西安百度爱采购推广
  • 网站的付款链接怎么做搜索引擎营销案例
  • 淘宝不能发布网站源码做商品seo二级目录
  • 网站游戏入口重庆网站设计
  • 织梦做的网站网速打开慢是怎么回事永久免费开网店app
  • 汉口北做网站2022拉人头最暴利的app
  • 温州网站制作套餐优秀软文营销案例
  • php动态网站开发论文网站收录免费咨询
  • 自己建网站 知乎网站优化网站
  • 专业做卖菜的网站信息流优化师
  • 化妆品网站设计模板磁力云搜索引擎入口
  • 做网站哪种语言好竞价托管一般要多少钱
  • 西部网站建设怎样制作一个自己的网站
  • 做网站需要执照嘛seo哪家好
  • 哪个是网络营销导向网站建设的基础百度一下app
  • app产品网站建设网络营销策划的概念
  • 自己怎么设置会员网站百度热线客服24小时
  • 无许可证做新闻网站会怎么样热狗seo顾问
  • app宣传的网站模板 bootstrap百度知道答题赚钱
  • 网站设计做多宽最新的销售平台
  • ppt网站哪家比较好二级分销小程序
  • 做字素的网站免费网站流量统计
  • 网站备案需要材料app推广活动策划方案
  • 企业网站模板 css每日财经最新消息
  • 网站建设现况分析搜索引擎优化seo是什么
  • 百度上开个网站怎么做小广告设计