`
seara
  • 浏览: 626976 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

快速排序(quicksort)算法实现

阅读更多
快速排序(quicksort)是分治法的典型例子,它的主要思想是将一个待排序的数组以数组的某一个元素X为轴,使这个轴的左侧元素都比X大,而右侧元 素都比X小(从大到小排序)。然后以这个X在变换后数组的位置i分为左右两个子数组,再分别进行快速排序,直到子数组中只有一个元素为止。

快速排序算法如下
<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> -->voidquicksort(intA[],intp,intr)
{
inti;
if(p<r)
{
i
=partition(A,p,r);
quicksort(A,
0,i-1);
quicksort(A,i
+1,r);
}
}

其中partition函数将得到X所在的位置i(在这里总以数组的最后一个元素为轴)。
<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> -->intpartition(intA[],intp,intr)
{
inti=p-1,j;
for(j=p;j<r;j++)
{
if(A[j]>=A[r])
{
i
++;
swap(
&A[i],&A[j]);
}
}
swap(
&A[i+1],&A[r]);
returni+1;
}

由于总是选择数组的最后一个元素做为轴,因此可能出现X的左边为n - 1或接近n - 1个元素,而右边没有元素,或元素很少的情况,即X最大或比较大。这样使quicksort将出现最坏的情况,也就是时间复杂度为O(n^2)。因此partition可以采用随机方式得到轴X的位置i。 这样它的平均情况是非常好的(时间复杂度为O(nlogn)),也就是说,最坏情况很难出现。
<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> -->intnew_random(intmin,intmax)
{
return(min+(int)(((float)rand()/RAND_MAX)*(max-min)));
}

intrandomize_partition(intA[],intp,intr)
{
inti=new_random(p,r);
swap(
&A[i],&A[r]);
returnpartition(A,p,r);
}

完整的代码如下
<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> -->#include<stdio.h>
#include
<stdlib.h>

voidout_int_array(intdata[],intn)
{
inti;
for(i=0;i<n;i++)
{
printf(
"%d",data[i]);
}
printf(
"\n");
}
voidswap(int*a,int*b)
{
intx;
x
=*a;
*a=*b;
*b=x;
}

intnew_random(intmin,intmax)
{
return(min+(int)(((float)rand()/RAND_MAX)*(max-min)));
}
intpartition(intA[],intp,intr)
{
inti=p-1,j;
for(j=p;j<r;j++)
{
if(A[j]>=A[r])
{
i
++;
swap(
&A[i],&A[j]);
}
}
swap(
&A[i+1],&A[r]);
returni+1;
}

voidquicksort(intA[],intp,intr)
{
inti;
if(p<r)
{
i
=partition(A,p,r);
quicksort(A,
0,i-1);
quicksort(A,i
+1,r);
}
}

intrandomize_partition(intA[],intp,intr)
{
inti=new_random(p,r);
swap(
&A[i],&A[r]);
returnpartition(A,p,r);
}

voidrandomize_quicksort(intA[],intp,intr)
{
inti;
if(p<r)
{
i
=randomize_partition(A,p,r);
quicksort(A,
0,i-1);
quicksort(A,i
+1,r);
}
}

intmain()
{
intA[]={4,1,44,-12,5,125,30};
intB[]={4,1,44,-12,5,125,30};
out_int_array(A,
7);
quicksort(A,
0,6);
out_int_array(A,
7);
printf(
"--------------------------randomize-----------------------------\n");
srand((unsigned)time(NULL));
randomize_quicksort(B,
0,6);
out_int_array(B,
7);
return0;
}


国内最棒的Google Android技术社区(eoeandroid),欢迎访问!

《银河系列原创教程》发布

《Java Web开发速学宝典》出版,欢迎定购

分享到:
评论

相关推荐

    C实现快速排序 quickSort

    然后定义了quickSort函数来实现快速排序算法。在main函数中,我们定义了一个数组并对其进行快速排序,并打印排序后的结果。 快速排序是一种高效的排序算法,它的实现相对简单但性能优秀。希望这个示例能帮助你理解...

    快速排序算法实现

    快速排序算法C语言实现,快排序算法QuickSort.cpp

    快速排序Quicksort演示

    日本程序员norahiko,写了一个排序算法的动画演示,非常有趣...目前,最常见的排序算法大概有七八种,其中"快速排序"(Quicksort)使用得最广泛,速度也较快。它是图灵奖得主C. A. R. Hoare(1934--)于1960时提出来的

    PHP-基于php实现的快速排序算法-QuickSort.zip

    PHP_基于php实现的快速排序算法_QuickSort

    c语言实快速排序算法 quicksort

    事实上,快速排序通常明显比其他Ο(n log n) 算法更快,因为它的内部循环(inner loop)可以在大部分的架构上很有效率地被实现出来。 快速排序使用分治法(Divide and conquer)策略来把一个串行(list)分为两个子...

    C语言实现快速排序算法

    快速排序算法,C语言 快速排序(Quicksort)是对冒泡排序的一种改进。由C. A. R. Hoare在1962年提出。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有...

    各种排序的C++算法实现(插入排序、合并排序、堆排序、快速排序)

    全面的排序算法实现,包括插入排序、合并排序、堆排序、快速排序。 堆排序:HeapSort 讲解详见http://blog.csdn.net/fly_yr/article/details/8550701 插入排序:InSertion_Sort 讲解详见...

    QuickSort算法java实现

    快速排序算法java实现,此程序所排序数组在程序中给出,没有输入。

    CUDA-Quicksort:CUDA-Quicksort:快速排序算法的基于GPU的实现-开源

    CUDA-quicksort 是一种基于 GPU 的快速排序算法实现。 CUDA-quicksort 旨在利用现代 NVIDIA GPU 的计算能力。 “文献中介绍了两种基于 GPU 的快速排序实现:GPU 快速排序,一种计算统一设备架构 (CUDA) 迭代实现,...

    quicksort_matlab_快速排序

    资源名:quicksort_matlab_快速排序 资源类型:matlab项目全套源码 源码说明: 全部项目源码都是经过测试校正后百分百成功运行的,如果您下载后不能运行可联系我进行指导或者更换。 适合人群:新手及有一定经验的...

    分治法快速排序算法QuickSort C++

    分治法的另外一种排序算法,快速排序。有注释,便于阅读,因为交换时使用的引用,暂时归为C++,C语言版稍后奉上。

    分治法快速排序算法QuickSort

    分治法的应用,快速排序是其中一种。注释便于读者明白。

    QuickSort快速排序的实现

    QuickSort快速排序的实现 [Qsort类] 使用C++模版,可实现自定义类型的排序方式 同时通过折半查找检索元素 附带控制台演示 欢迎指正和建议 程序详细描述可见:...

    quicksort 非递归算法C++实现

    用非递归算法实现quicksort快速排序,高效

    快速排序算法

    快速排序算法快速排序算法快速排序算法快速排序算法快速排序算法

    QuickSort基于C++的快速排序算法

    用c语言实现的快排算法 附有简单的实例

    多种排序算法C代码实现

    选择(SelectSort)、插入(InsertSort)、冒泡(BubbleSort)、Shell排序(ShellSort)、快速排序(QuickSort)、快速排序的改进算法(QStackSort)、合并排序算法(MergeSort)、 合并排序算法的改进算法(MergeSort2)、堆排序...

    快速排序QuickSort

    快速排序是20世纪十大算法之一,可见其精妙之处,相较于其他复杂度为O(n^2),可以提高到n*logn.一般我们研究快速排序基本采用内置类型,如int型数据,本类为了更通用,采用了模板类,具体数据对象类型可根据用户自己...

    MapBasic实现的快速排序(QuickSort)算法

    本算法使用MapBasic编写而成,文件类型为".MB"。如果没有装相关软件,可以使用记事本打开。希望对大家有所帮助。

    C++实现快速排序(Quicksort)算法

    主要为大家详细介绍了C++实现快速排序(Quicksort)算法,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

Global site tag (gtag.js) - Google Analytics