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

广州外贸推广天津seo推广服务

广州外贸推广,天津seo推广服务,推广渠道分析,阿里云的wordpress文章目录 (一)概念(二)基本思想(三)排序流程(三)代码实现 (一)概念 快速排序相当于对冒泡排序的一个优化,也是基于交换的排序算法 时间复杂度 O(…

文章目录

    • (一)概念
    • (二)基本思想
    • (三)排序流程
    • (三)代码实现

(一)概念

快速排序相当于对冒泡排序的一个优化,也是基于交换的排序算法
时间复杂度 O(nlogn)

(二)基本思想

通过一趟排序,将待排序数据分成两部分,其中一部分数据都比另一部分小,而这两部分数据的内部不要求有序;
然后再对这两部分数据做同样的操作,也各自分成一大一小两部分,依次类推,直到整个数据组有序

(三)排序流程

定义两个下标变量,分别指向待排序的数组段的头和尾
以下图为例:
在这里插入图片描述
定义一个flag变量记录左侧第一个元素flag=arr[low](为了编程方便,也可以记录右侧第一个元素),然后从右向左开始依次比较flag和数组元素的大小

  • 注:此处不要写成flag=arr[0]; 因为之后要对左右半边分别递归使用该函数,当对右半边排序时,应该使flag等于右半边的最左侧的数

如果flag<arr[high],就执行high- -,即下标high向左移动
在这里插入图片描述
如果flag>arr[high],就执行arr[low]=arr[high],low++,但是前提条件是low<high
在这里插入图片描述
此时再从左往右依次比较flag和arr[low]的大小
如果flag>arr[low],就执行low++
在这里插入图片描述
如果flag<arr[low],就执行arr[high]=arr[low],high- -,但是前提条件是low<high
在这里插入图片描述

循环上述两个步骤直到low==high时,将arr[low]=flag或者arr[high]=flag
此时flag左边都是比flag小的数,flag右边都是比flag大的数,但是两侧无序
在这里插入图片描述
之后再对左半边和右半边分别排序
此处仅以右半边为例,左半边同理,只是low和high的值不同。
右半边:low=5,high=9(左半边:low=0,high=3)
在这里插入图片描述
首先使flag=arr[low],此处为7
然后判断flag<arr[high]? 如果小于,就执行high- -
在这里插入图片描述

如果大于就执行arr[low]=arr[high],low++
在这里插入图片描述
之后判断flag>arr[low]? 如果大于,就执行low++
如果小于就执行arr[high]=arr[low],high- -
在这里插入图片描述
直到low==high时,arr[low]=flag或者arr[high]=flag
在这里插入图片描述
此时flag左边的值是比flag小的,右边的值是比flag大的,但是左右两边是无序的,因此再次执行上述操作使当前数据段再次分成左右两部分,再次分别对左右两部分进行排序。
因此使用递归即可完成,递归函数中实现的功能就是:
先调用一次sort函数,确定了flag的位置,然后再分别对左半边和右半边排序,直到左右半边无法再继续分隔,即出现low>high或者low==high的情况,此时即是递归函数的出口。

(三)代码实现

#include <stdio.h>int print(int *arr,int len){if(NULL==arr) return -1;for(int i=0;i<len;i++){printf("%d ",arr[i]);}putchar(10);return 0;
}int my_sort(int *arr,int low,int high){if(NULL==arr) return -1;int flag=arr[low];while(low < high){while(flag<arr[high]&&low<high){high--;}if(low<high){arr[low]=arr[high];low++;}while(flag>arr[low]&&low<high){low++;}if(low<high){arr[high]=arr[low];high--;}}arr[low]=flag;return low;
}int quick_sort(int *arr,int low,int high){if(NULL==arr) return -1;if(low < high){int ret=my_sort(arr,low,high);quick_sort(arr,low,ret-1);quick_sort(arr,ret+1,high);}return 0;
}int main(int argc, char const *argv[]){int arr[10]={5,2,3,10,7,1,4,9,6,8};printf("排序前:\n");print(arr,10);printf("排序后:\n");quick_sort(arr,0,9);print(arr,10);return 0;
}
http://www.dtcms.com/wzjs/430758.html

相关文章:

  • 宁波做简单网站的网站关键词在线优化
  • 学校网站建设制度seo研究中心教程
  • 有没有免费做网站的58同城如何发广告
  • 深圳航空公司官方网站发稿吧
  • 怎么做网站外链接武汉网站seo德升
  • 网站设计市场价seo整站优化外包公司
  • 怎么给别人做网站合肥seo网站排名
  • jarvis主题wordpressseo建站技术
  • 淘宝网站如何做虚拟seo建站还有市场吗
  • 长沙网站设计公司哪家好北京公司排名seo
  • 团购网站平台建设2022国内外重大新闻事件10条
  • 可靠的合肥网站建设千万别在百度上搜别人的名字
  • 如何传图片做网站加盟
  • 郑州免费建站网站怎么宣传
  • 网站开发主题信息流推广
  • 服务器哪些端口可以做网站网络宣传渠道有哪些
  • wordpress怎么限制建站数量今日头条淄博新闻
  • 淄博网站建设 leda.cc北京网站快速排名优化
  • 淘客网站如何做推广公司官网模板
  • 在民办医院做网站编辑怎么样seo优化的方法
  • 官方网站建设的意义如何宣传推广自己的产品
  • 上海哪里有做网站的百度指数官网登录
  • 开网络公司做网站挣钱么seo资源网站 排名
  • 易语言做网站视频宁波网站建设推广平台
  • 国外获奖网站自媒体人专用网站
  • 做金融怎么进基金公司网站seo在哪可以学
  • 大江网站建设免费搭建网站平台
  • 自己做同城购物网站天津seo优化
  • ps海报素材网seo网络推广方法
  • 网站改版文案包装上海网络推广专员