`
阿尔萨斯
  • 浏览: 4168007 次
社区版块
存档分类
最新评论

“快速排序算法”问题的分而治之算法

 
阅读更多
<iframe align="center" marginwidth="0" marginheight="0" src="http://www.zealware.com/csdnblog.html" frameborder="0" width="728" scrolling="no" height="90"></iframe>
/**//*
标题:>应试编程实例-[分治法程序设计]
作者:成晓旭
时间:2002年09月18日(21:43:00-22:03:00)
实现“快速排序算法”问题的分而治之算法函数
*/

#include
"stdio.h"
#include
"stdlib.h"

//:============================“快速排序算法”问题的分而治之算法===========================
/**//*
时间:2002年09月18日(21:43:00-22:03:00)
实现“快速排序算法”问题的分而治之算法函数
问题描述:
用分治法的思想实现快速排序算法。
编程思想:
快速排序算法的基本思想本身就是分治法。通过分割,将无序序列分成两部分,
其中前一部分的元素值都小于后一部分的元素值。然后每一部分再各自递归进行上
述过程,直到每一部分的长度为1为止。
首先,在序列的第一个,中间一个,最后一个元素中选取中项,设为p[middle],
并作temp=p[middle](保存中项);
其次,将序列中的第一个元素移到p[middle]的位置上;
然后,设两个指针i,j分别指向将排序序列的第一个元素和最后一个元素;
重复以上两步,直到i=j为止;
最后,将array[i]=temp(将tmep移到array[i])。
*/

#defineMAXN20

voidCarve_up(intarray[],intnumber,int*m)
...{
inti,j,k,middle,temp;
i
=0;
j
=number-1;
k
=(i+j)/2;
//在下标i,j,k的数组元素中选取中项
if(array[i]>=array[j]&&array[j]>=array[k])
middle
=j;//Array[j]是中项
elseif(array[i]>=array[k]&&array[k]>=array[j])
middle
=k;//Array[k]是中项
else
middle
=i;//Array[i]是中项
temp=array[middle];
array[middle]
=array[i];
while(i!=j)
...{
while(ij&&array[j]>=temp)
j
--;//j逐步减小,直到发现一个array[j]
if(ij)
...{
array[i]
=array[j];
i
++;
while(ij&&array[i]temp)
i
++;//i逐步减小,直到发现一个array[i]>temp为止
if(ij)
...{
array[j]
=array[i];
j
--;
}

}

}

array[i]
=temp;
*m=i;
return;
}

voidQuick_Sort(intarray[],intnumber)
...{
inti;
if(number>1)
...{
Carve_up(array,number,
&i);
Quick_Sort(array,i);
Quick_Sort(
&array[i+1],number-i-1);
}

return;
}

voidRun_Quick_Sort()
...{
inti,array[MAXN]=...{1,9,3,7,18,2,20,4,16,5,15,6,14,7,13,6,12,8,11,10};
Quick_Sort(array,MAXN);
for(i=0;iMAXN;i++)
printf(
"%3d",array[i]);
}

//:============================“快速排序算法”问题的分而治之算法===========================

intmain(intargc,char*argv[])
...{
Run_Quick_Sort();

printf(
" 应用程序运行结束! ");
return0;
}





分享到:
评论

相关推荐

    算法设计中分而治之快速排序

    这是《算法设计与分析》中的一个程序,方法是用分而治之,作用是快速排序。

    快速排序算法的副本.zip

    本资源是介绍快速排序算法原理(挖坑、填数、分而治之)等,并且用两种算法编写代码。

    04_第四章 快速排序(分而治之)

    学习快速排序法——一种优雅的排序算法。比第二章介绍的选择排序快的多。使用的是分而治之的策略。 目录 分而治之 快速排序 再谈大O表示法 分而治之 分而治之并非可用于解决问题的算法,而是一种解决思路。 使用...

    算法设计—分治算法

    在计算机科学中,分治法是一种很重要的算法。字面上的解释是“分而治之”,就是把一个复杂的问题分成两个或更多的...这个技巧是很多高效算法的基础,如排序算法(快速排序,归并排序),傅立叶变换(快速傅立叶变换)……

    C#递归算法之快速排序

    上两片第归算法学习: ...与归并算法不同,快速排序是就地排序,而归并排序需要把元素在临时向量中拷贝,下面通过对以下向量进行排序来理解和加深快速排序算法的步骤: v={800,150,300,650,550,500,400,350,450,400,

    算法分析与设计之分治策略

    在计算机科学中,分治法是一种很重要的算法。字面上的解释是“分而治之”,就是把一个复杂的问题分成两个或更多的...这个技巧是很多高效算法的基础,如排序算法(快速排序,归并排序),傅立叶变换(快速傅立叶变换)……

    经典算法(C/C++)

    五大常用算法之一:分治算法 分治算法 一、基本概念 在计算机科学中,分治法是一种很重要的算法。...这个技巧是很多高效算法的基础,如排序算法(快速排序,归并排序),傅立叶变换(快速傅立叶变换)……

    java实现十大经典算法.docx

    * 问题的解即子问题的解的合并,这个技巧就是很多高效算法的基础,如排序算法(快速排序,归并排序),傅里叶变换(快速傅里叶变换)... * (2)基本步骤 * 1)分解:将原问题分解为若干个规模较小的问题,相互...

    第6章 分治.ppt

    分治,字面上的解释是“分而治之”,...分治法是很多高效算法的基础,如排序算法(快速排序,归并排序),傅立叶变换(快速傅立叶变换)等等。 本文档详细举例说明算法问题中的分治,非常有效,简单易懂,印象深刻。

    python中归并排序源码

    pyhton编写的归并排序是一种高效的快速排序算法,也是python本身内部的排序算法,它不仅时间复杂度小而且简单,符合分而治之的原则,也让很多程序员喜欢,大家快打开看看吧。

    算法概论.pdf

    2Divide-and-conqueralgorithms(分而治之算法) 2.1Multiplication(乘法) 2.2Recurrencerelations(递归关系) 2.3Mergesort(合并排序) 2.4Medians(中位数) 2.5Matrixmultiplication(矩阵乘法) 2.6...

    10级软件学院《数据结构与算法》期末考试 题B参考答案1

    2. 无向图的邻接矩阵如下: 深度优先搜索树如下: 3. 快速排序算法是一种“分而治之”的排序思想 1. 参考程序 2. 参考程序

    JavaScript实现in-place思想的快速排序方法

    以分治法为策略实现的快速排序算法。 本文主要要谈的是利用javascript实现in-place思想的快速排序 分治法: 在计算机科学中,分治法是建基于多项分支递归的一种很重要的算法范式。字面上的解释是“分而治之”,就是...

    算法::graduation_cap:重要算法及其实现

    重要算法 选择排序 选择排序算法通过从未排序部分重复查找最小元素(考虑升序)并将其放在开头来对数组...快速排序 QuickSort是分而治之算法。 它选择一个元素作为枢轴,并围绕拾取的枢轴对给定数组进行分区。 quickSor

    AlgoVisualizer:React Base算法可视化

    算法/可视化器算法可视化器是一个React基础Web应用程序,我们可以在其中可视化并使用算法。演算法气泡排序快速排序单链表DFS 迪克斯特拉先决条件基本编码知识有关... 快速排序快速排序是分而治之的算法。 基本上它有一

    数据结构与算法:C++描述

    14.2.3 快速排序 447 14.2.4 选择 452 14.2.5 距离最近的点对 454 14.3 解递归方程 462 14.4 复杂性的下限 463 14.4.1 最小最大问题的下限 464 14.4.2 排序算法的下限 465 第15章 动态规划 467 15.1 算法思想 467 ...

    数据结构算法与应用 很详细的,数据结构算法全集 这个是你想找的

    分而治之算法 434 14.1 算法思想 434 14.2 应用 440 14.2.1 残缺棋盘 440 14.2.2 归并排序 443 14.2.3 快速排序 447 14.2.4 选择 452 14.2.5 距离最近的点对 454 14.3 解递归方程 462 ...

    数据结构经典问题和算法分析

    分治法的设计思想是,将一个难以直接解决的大问题,分割成一些规模较小的相同问题,以便各个击破,分而治之。 如果原问题可分割成k个子问题(1≤n),且这些子问题都可解,并可利用这些子问题的解求出原问题的解,...

    数据结构算法与应用-C++语言描述

    14.2.3 快速排序 447 14.2.4 选择 452 14.2.5 距离最近的点对 454 14.3 解递归方程 462 14.4 复杂性的下限 463 14.4.1 最小最大问题的下限 464 14.4.2 排序算法的下限 465 第15章 动态规划 467 15.1 算法思想 467 ...

    数据结构、算法与应用:C++语言描述(原书第2版)第二部分

    18.4.2 排序算法的下限 第19章 动态规划 19.1 算法思想 19.2 应用 19.2.1 0/1背包问题 19.2.2 矩阵乘法链 19.2.3 所有顶点对之间的最短路径 19.2.4 带有负值的单源最短路径 19.2.5 网组的无交叉子集 19.3 参考及推荐...

Global site tag (gtag.js) - Google Analytics