快速算法的两个实现方法

今天调试了快速算法的代码,当然网上这样的代码一大堆,只是这个是自己一点点写的,中间易错点都出现并调试出来。留着以后自己复习用了。

交换代码:

void sw(int *a,int *b)//交换数据
{
int temp;
temp=*a;
*a=*b;
*b=temp;
}

实现方法1:

////由大到小排序

void sort(int a[],int low,int high)
{

if(low>=high)/////递归出口
return;
int key=a[low];////
int first=low;
int last=high;
while(low<high)
{
  if(a[low]<=key && a[high]>key && low<high)
  {
    sw(&a[low],&a[high]);
    low++;
    high--;
  }
  while(a[low]>key&&low<high)
    low++;
  while(a[high]<=key&&low<high)
  high--;
}

////注意:一定要搞清楚递归调用的第二个和第三个参数!first和last保存了初始数组的第一个和最后一变量地址,low和high是两个变量。

////在low>high是才跳出上面的while循环。故分割数组,第一部分是first到high,第二部分是low到last

if (high>1)
  sort(a,first,high);
if(first<high)
  sort(a,low,last);

}

第二种方法:

//此算法不是很好理解,特别是它的交换操作.

void Qsort(int a[],int low,int high)
{
/////由小到大排序
  if(low>=high)
  {
    return;
  }
  int first = low;
  int last = high;
  int key = a[low];
  while (first <last)
  {
    while (first<last && a[last]>=key)
      last--;
    a[first] = a[last];
    while (first<last &&a[first]<= key)
      first++;
    a[last] = a[first];
  }

//////重新将key值赋给first,现在first的位置就是个分界线,他站在了自己应属的位置,不用动了

////first将数组分成两个  第一个是low  到 first-1,第二个是first+1 到high  。

///注意,此算法和上面的算法区别是本算法是用low和high保存数组的第一个和最后一个元素的下标。

///但本质是一样的。first保存了数组分割位置
  a[first] = key;

  Qsort(a,low,first-1);
  Qsort(a,first+1,high);

}

时间: 2024-10-11 11:04:51

快速算法的两个实现方法的相关文章

在web页面上快速生成二维码的两种实用方法

二维码是桌面和移动端快速分享的高效手段之一,这里介绍两个不错的快速开发二维码的方法,和大家分享一下~~ 方法1:使用新浪提供的服务 这种方式简单快速,在服务端生成一个二维码的图片,兼容性比较好,你无需自己处理任何相关二维码的生成,只需要提供一端文字或者url即可,方法如下: <img src="http://qrcoder.sinaapp.com?t=http://www.gbtags.com"> 生成效果如下: 大家扫一扫就可以访问极客标签主站了~~ 方法2: 使用jQu

快速排序算法的两个写法

快速排序作为应用比较广泛,而且时间复杂度比较优越的排序算法备受大家的喜爱.最近有点悠闲,就又把这个快速算法研究了一遍,目前掌握了两种排序算法的思路,为了以免忘记,故详细的记录下来,也供大家学习借鉴,不足之处望请指教. 快速排序的基本原理: 假设一个待排序的数组如上图所示,排序的目的就是将其从小到大排序.快速排序的主要步骤就是设定一个待排序的元素(称作主元,记作temp),经过一轮划分排序后在这个主元左边的元素值都小于它,在主元右边的元素值都大于它,一轮划分后的效果应该是这样的,如下图: 这样以t

基于Apache+Tomcat负载均衡的两种实现方法

Apache+Tomcat实现负载均衡的两种实现方法 如果我们将工作在不同平台的apache能够实现彼此间的高效通信,因此它需要一种底层机制来实现--叫做apr Apr的主要目的就是为了其能够让apache工作在不同的平台上,但在linux上安装apache的时候通常都是默认安装的 [[email protected] ~]#rpm -qi aprName                 :apr                                        Relocation

Zen Coding: 一种快速编写HTML/CSS代码的方法[Emmet]

译自:[Smashing Magazine](http://www.smashingmagazine.com/2009/11/21/zen-coding-a-new-way-to-write-html-code/)中文:[Zen Coding: 一种快速编写HTML/CSS代码的方法](http://www.qianduan.net/zen-coding-a-new-way-to-write-html-code.html) 请尊重版权,转载请注明来源! - - - - - - 在本文中我们将展示

快速的判断两个字符串型数组是否有交集

■[面试题]如何快速的判断两个数组是否有交集 public boolean hasIntersection(String[] array1, String[] array2) { ... } array1中,只要有一个在array2中,存在,就返回true,否则返回false 求最快的方法 原帖:http://www.oschina.net/question/1756518_241715 ■代码 --------------------------------------------------

快速找到Google可用Hosts的方法

Google这些天被封了大量IP,导致现在访问Google服务越来越困难,使用Google搜索的用户也大量下降,对于不想使用付费VPN的用户来说,修改hosts文件来访问Google仍然是一个免费简单的可行方案,今天我就介绍一下我通常用到的快速找到Google可用hosts的方法. 寻找可用IP地址 通常Google的服务器有很多个,一般都会有访问加速功能,就是说对于不同国家会解析出访问速度最快的网址,因此通常中国访问的IP被封后,其他国家访问的IP还能用,因此只要使用一个Ping工具找出这个服

hdu3572--Task Schedule(最大流+两种优化方法,dinic)

Task Schedule Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 3651    Accepted Submission(s): 1271 Problem Description Our geometry princess XMM has stoped her study in computational geometry t

webqq 获得好友列表hash算法 获得最新hash的方法

webqq获得好友列表的hash算法,大约每个月中旬会变动一次.知道怎么获得他就可以了. js文件路径 http://web.qstatic.com/webqqpic/pubapps/0/50/eqq.all.js 加密算法为 P=function(b,i),有时候是 P=function(b,j) 直接打开这个文件后搜索P=function,有两个参数的就是. 把函数体拷贝下来后百度 js格式化工具,把内容放进去,格式化一下. 下面是2014年6月17日时的hash函数: P=function

黑马程序员【两种Ajax方法】

两种Ajax方法 Ajax是一种用于快速创建动态网页的技术,他通过在后台与服务器进行少量的数据交换,可以实现网页的异步更新,不需要像传统网页那样重新加载页面也可以做到对网页的某部分作出更新,现在这项技术已经被人们广泛应用,而对于一些对Web的了解还不是很深入的初学者,Ajax依然带着一层神秘的难懂的色彩,今天就在这里给大家以简单的方式解读一下Ajax的实现步骤和原理,并且给大家两种实现Ajax的方法,js和jquery. 首先ajax其实就是js+xml的技术,前端的表现就是一段js代码.要使用