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

珠海澳门网站建设公司哪家好百度快照投诉中心官网

珠海澳门网站建设公司哪家好,百度快照投诉中心官网,机械工业第六设计研究院有限公司,网络服务提供者收集和使用个人信息应当符合的条件有0 算法简介 快速排序是一种高效率排序算法,它是对冒泡排序的一种改进,它也是一种不稳定排序算法。快速排序的核心是比较、交换和递归。 在待排序数组中指定一个基准元素pivot(一般选取数组首元素),使得数组排序之后基…

0 算法简介

快速排序是一种高效率排序算法,它是对冒泡排序的一种改进,它也是一种不稳定排序算法快速排序的核心是比较、交换和递归。 在待排序数组中指定一个基准元素pivot(一般选取数组首元素),使得数组排序之后基准元素左边的所有元素均小于它,右边的元素均大于它,重复以上过程递归地对左右子集合进行排序。
平均时间复杂度 :O(nlogn) ,最坏时间复杂度为O(n2)

1 算法步骤

  • 定义一个基准位pivot(可选定数组的第一个值),比如以左边的低位为基准位:array[low],比基准位的值大的放在右边,基准位值小的放在左边(根据具体的排序需求来)

  • 定义两个指针作为哨兵,分别为left和right且left < right,当left > right时退出当轮排序。

  • 首先从右边的高位指针right开始向左边遍历,直到找到比基准小的元素位置;然后从左边的低位开始向右遍历,直到找到比基准大的元素位置。

  • 如果指针未相遇,则交换左右指针指向的元素位置。如果指针已经相遇,即left==right,则将基准元素所在的位置与right所在位置的元素进行交换。

  • 重复上述过程,递归地对数组左右子集合元素进行排序。

2 用例说明

假设当前有一待排序的数组arr = [6,1,2,7,9,3,4,5,10,8]。定义低位指针low = 0,高位指针high = arr,length - 1,选取首位为基准元素pivot = arr[low]。

  • 首先从右边的高位指针right开始向左边遍历,直到找到比基准小的元素位置,这里为元素5所在位置。

[6,1,2,7,9,3,4,5,10,8]

  • 从左边的低位开始向右遍历,直到找到比基准大的元素位置,这里为元素7所在位置。
    [6,1,2,7 ,9,3,4,5,10,8]
  • 指针未相遇,则交换左右指针指向的元素7和元素5的位置。
    [6,1,2,5 ,9,3,4,7,10,8]
    重读上述步骤,得到:[6,1,2,5,9,3,4,7,10,8],此时左右指针未相遇,继续交换位置。
    [6,1,2,5,4,3,9,7,10,8]
    当第三次遍历时,做哦鱼指针在元素为3的位置上相遇,此时结束循环遍历,交换基准元素与元素3的位置,第一轮排序结束得到以下数组
    [3,1,2,5,4,6,9,7,10,8] 可以看到一轮排序之后基准元素左半边的元素值都小于它,右半边的元素值都大于它。
    通过递归重复上述步骤,分别对数组左子集合[3,1,2,5,4]和数组右子集合[9,7,10,8]进行排序。

3 代码实现

public static void quickSort(int[] arr, int low, int high) {// 当low == high时表示该序列只有一个元素了,不必排序if(low >= high) {return;}int left = low;  //定义左哨兵int right = high;   //定义右哨兵int pivot = arr[low];   //定义基准元素,一般选择数组的第一个元素while (left < right) {//从右边开始遍历 找到右边小于基准元素pivot的元素位置while (left < right && arr[right] >= pivot) {right--;}//从左边开始遍历 找到左边大于基准元素pivot的元素位置while (left < right && arr[left] <= pivot) {left++;}//找到了当前左边大于pivot和右边小于pivot的元素位置 交换这两个元素的位置swap(arr,left,right);}//当left == right 说明该轮排序结束,最后交换pivot与right位置元素的位置swap(arr, low, right);//递归调用,对左子集合和右子集合进行排序//左子集合递归排序quickSort(arr,low, right - 1);//右子集合递归排序quickSort(arr, right + 1, high);}//交换数组中两个位置的元素public static void swap(int[] arr, int i, int j) {if (arr.length == 0 || j >= arr.length || i < 0) return;int temp = arr[i];arr[i] = arr[j];arr[j] = temp;}
http://www.dinnco.com/news/38337.html

相关文章:

  • 给孩子做衣服的网站互动营销
  • 万网做网站怎么样推广员是做什么的
  • 上海免费网站建设品牌厦门网站快速排名优化
  • 武汉手机网站建设咨询国外市场网站推广公司
  • wordpress 连接qq视频seo费用价格
  • 做软装的网站太原seo网站管理
  • 网站设计制作推荐百度联系电话多少
  • 网站实名制认证备案免费外贸接单平台
  • 黄埔网站建设设计确认已有81人感染
  • 企业网站做的比较好百度官网认证免费
  • 葡萄牙网站后缀网页优化
  • 企业网站宣传册应该哪个部门做seopc流量排名官网
  • 襄阳市建设工程质量监督站网站如何快速推广自己的品牌
  • 品牌网站建设内容广告营销策略
  • 郑州交友网站开发公司线上营销活动有哪些
  • 网站开发人员没有按照设计开发全网营销的公司
  • 河南网站建设哪家好推广和竞价代运营
  • 义乌个人兼职做建设网站网站seo推广公司靠谱吗
  • cc域名做网站好吗排名
  • wordpress登录后台没有加载css青岛推广优化
  • 专做国外采购的网站产品宣传推广方式有哪些
  • 网站怎么做才是对搜索引擎友好网站每天做100个外链
  • 在线crm客户关系管理seo排名软件怎么做
  • 想学做宝宝食谱上什么网站免费做网页的网站
  • 广州建筑集团网站广州全网推广
  • 番禺网站建设系统宁波seo关键词优化制作
  • wordpress文件上传限制插件公司官网优化方案
  • 有哪些可以做头像的网站google关键词排名查询
  • 企业建设微网站的重要性软文写作案例
  • 天津网站设计哪家公司好最全bt磁力搜索引擎索引