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

甘肃 网站建设 开发 app网站颜色设计

甘肃 网站建设 开发 app,网站颜色设计,电子工厂网站建设,贵阳有做网站的公司吗快速排序介绍 快速排序(Quick Sort)使用分治法策略。 它的基本思想是#xff1a;选择一个基准数#xff0c;通过一趟排序将要排序的数据分割成独立的两部分#xff1b;其中一部分的所有数据都比另外一部分的所有数据都要小。然后#xff0c;再按此方法对这两部分数据分别进…快速排序介绍 快速排序(Quick Sort)使用分治法策略。 它的基本思想是选择一个基准数通过一趟排序将要排序的数据分割成独立的两部分其中一部分的所有数据都比另外一部分的所有数据都要小。然后再按此方法对这两部分数据分别进行快速排序整个排序过程可以递归进行以此达到整个数据变成有序序列。 快速排序流程 (1) 从数列中挑出一个基准值。 (2) 将所有比基准值小的摆放在基准前面所有比基准值大的摆在基准的后面(相同的数可以到任一边)在这个分区退出之后该基准就处于数列的中间位置。 (3) 递归地把基准值前面的子数列和基准值后面的子数列进行排序。 快速排序图文说明 /** 快速排序** 参数说明* a -- 待排序的数组* l -- 数组的左边界(例如从起始位置开始排序则l0)* r -- 数组的右边界(例如排序截至到数组末尾则ra.length-1)*/ void quick_sort(int a[], int l, int r) {if (l r){int i,j,x;i l;j r;x a[i];while (i j){while(i j a[j] x)j--; // 从右向左找第一个小于x的数if(i j)a[i] a[j];while(i j a[i] x)i; // 从左向右找第一个大于x的数if(i j)a[j--] a[i];}a[i] x;quick_sort(a, l, i-1); /* 递归调用 */quick_sort(a, i1, r); /* 递归调用 */} } 下面以数列a{30,40,60,10,20,50}为例演示它的快速排序过程(如下图)。 上图只是给出了第1趟快速排序的流程。在第1趟中设置xa[i]即x30。 (01) 从右 -- 左查找小于x的数找到满足条件的数a[j]20此时j4然后将a[j]赋值a[i]此时i0接着从左往右遍历。 (02) 从左 -- 右查找大于x的数找到满足条件的数a[i]40此时i1然后将a[i]赋值a[j]此时j4接着从右往左遍历。 (03) 从右 -- 左查找小于x的数找到满足条件的数a[j]10此时j3然后将a[j]赋值a[i]此时i1接着从左往右遍历。 (04) 从左 -- 右查找大于x的数找到满足条件的数a[i]60此时i2然后将a[i]赋值a[j]此时j3接着从右往左遍历。 (05) 从右 -- 左查找小于x的数没有找到满足条件的数。当ij时停止查找然后将x赋值给a[i]。此趟遍历结束 按照同样的方法对子数列进行递归遍历。最后得到有序数组 时间复杂度和稳定性 快速排序稳定性 快速排序是不稳定的算法它不满足稳定算法的定义。算法稳定性 -- 假设在数列中存在a[i]a[j]若在排序之前a[i]在a[j]前面并且排序之后a[i]仍然在a[j]前面。则这个排序算法是稳定的 快速排序时间复杂度 快速排序的时间复杂度在最坏情况下是O(N2)平均的时间复杂度是O(N*lgN)。 这句话很好理解假设被排序的数列中有N个数。遍历一次的时间复杂度是O(N)需要遍历多少次呢至少lg(N1)次最多N次。 (01) 为什么最少是lg(N1)次快速排序是采用的分治法进行遍历的我们将它看作一棵二叉树它需要遍历的次数就是二叉树的深度而根据完全二叉树的定义它的深度至少是lg(N1)。因此快速排序的遍历次数最少是lg(N1)次。 (02) 为什么最多是N次这个应该非常简单还是将快速排序看作一棵二叉树它的深度最大是N。因此快读排序的遍历次数最多是N次。 代码实现 C语言实现 /*** 快速排序C 语言** author skywang* date 2014/03/11*/#include stdio.h// 数组长度 #define LENGTH(array) ( (sizeof(array)) / (sizeof(array[0])) )/** 快速排序** 参数说明* a -- 待排序的数组* l -- 数组的左边界(例如从起始位置开始排序则l0)* r -- 数组的右边界(例如排序截至到数组末尾则ra.length-1)*/ void quick_sort(int a[], int l, int r) {if (l r){int i,j,x;i l;j r;x a[i];while (i j){while(i j a[j] x)j--; // 从右向左找第一个小于x的数if(i j)a[i] a[j];while(i j a[i] x)i; // 从左向右找第一个大于x的数if(i j)a[j--] a[i];}a[i] x;quick_sort(a, l, i-1); /* 递归调用 */quick_sort(a, i1, r); /* 递归调用 */} }void main() {int i;int a[] {30,40,60,10,20,50};int ilen LENGTH(a);printf(before sort:);for (i0; iilen; i)printf(%d , a[i]);printf(\n);quick_sort(a, 0, ilen-1);printf(after sort:);for (i0; iilen; i)printf(%d , a[i]);printf(\n); } c实现 /*** 快速排序C** author skywang* date 2014/03/11*/#include iostream using namespace std;/** 快速排序** 参数说明* a -- 待排序的数组* l -- 数组的左边界(例如从起始位置开始排序则l0)* r -- 数组的右边界(例如排序截至到数组末尾则ra.length-1)*/ void quickSort(int* a, int l, int r) {if (l r){int i,j,x;i l;j r;x a[i];while (i j){while(i j a[j] x)j--; // 从右向左找第一个小于x的数if(i j)a[i] a[j];while(i j a[i] x)i; // 从左向右找第一个大于x的数if(i j)a[j--] a[i];}a[i] x;quickSort(a, l, i-1); /* 递归调用 */quickSort(a, i1, r); /* 递归调用 */} }int main() {int i;int a[] {30,40,60,10,20,50};int ilen (sizeof(a)) / (sizeof(a[0]));cout before sort:;for (i0; iilen; i)cout a[i] ;cout endl;quickSort(a, 0, ilen-1);cout after sort:;for (i0; iilen; i)cout a[i] ;cout endl;return 0; } java实现 /*** 快速排序Java** author skywang* date 2014/03/11*/public class QuickSort {/** 快速排序** 参数说明* a -- 待排序的数组* l -- 数组的左边界(例如从起始位置开始排序则l0)* r -- 数组的右边界(例如排序截至到数组末尾则ra.length-1)*/public static void quickSort(int[] a, int l, int r) {if (l r) {int i,j,x;i l;j r;x a[i];while (i j) {while(i j a[j] x)j--; // 从右向左找第一个小于x的数if(i j)a[i] a[j];while(i j a[i] x)i; // 从左向右找第一个大于x的数if(i j)a[j--] a[i];}a[i] x;quickSort(a, l, i-1); /* 递归调用 */quickSort(a, i1, r); /* 递归调用 */}}public static void main(String[] args) {int i;int a[] {30,40,60,10,20,50};System.out.printf(before sort:);for (i0; ia.length; i)System.out.printf(%d , a[i]);System.out.printf(\n);quickSort(a, 0, a.length-1);System.out.printf(after sort:);for (i0; ia.length; i)System.out.printf(%d , a[i]);System.out.printf(\n);} } 上面3种语言的实现原理和输出结果都是一样的。下面是它们的输出结果 before sort:30 40 60 10 20 50 after sort:10 20 30 40 50 60
http://www.zqtcl.cn/news/394436/

相关文章:

  • 做外贸免费的网站有哪些专业简历制作
  • 园林景观设计网站推荐国内wordpress主题
  • 一流的免费网站建设摄影网站源码
  • 深圳高端网站设计公司怎样开发手机网站建设
  • 做网站需要用c语言吗新闻热点
  • 做网站需要交维护费么网站建设详细合同范本
  • 网站运营需要做什么静态网站作品
  • 如何做旅游休闲网站苍南做网站
  • wordpress jp theme关键词排名优化公司成都
  • Soho外贸常用网站wordpress下不了插件吗
  • 企业网站建设小技巧有哪些WordPress网站小程序
  • 公司招聘网站续费申请seo编辑是干什么的
  • 58同城泉州网站建设人工投票平台app
  • dede 网站地图 插件网站引导页flash
  • 聊城做网站的公司渠道网站总体结构
  • 北京比较大的网站建设公司wap网站引导页特效
  • 做关于植物的网站即墨网站设计
  • 怎么提升网站收录商品网页制作
  • 做网站建设的平台wordpress5.0发布
  • 站长工具a级查网站域名
  • 免费做网站电话手机开发者模式打开有什么影响
  • 上海免费网站建站模板毕节做网站优化
  • 影响网站建设的关键点手机网站制作app
  • 商务网站建设的流程深圳模板网站建设案例
  • 做中英文网站多少钱方维制网站
  • 做一个信息发布网站要多少钱开发小程序多少钱一个
  • 山东网站设计网站关键词设置技巧
  • 做网站服务怎么赚钱产品展示型的网站功能有哪些
  • 丹东网站制作宁波网站建设公司制作网站
  • 南宁建设工程质量网站九江网站建设九江