STL经典算法集锦<三>之partition与qsort

原创 2012年03月24日 20:15:42

            STL的分割算法主要使用了仿函数来实现。而此处的分割则不,此处实现了两种形式的分割算法:非随机分割算法、随机分割算法(随机算法是在非随机算法的基础上封装而成)。而快速排序则只需简单依赖分割算法就能实现。

非随机分割算法:

int partition(int array[],int left,int right)
{
		//选择最右侧的元素作为分割标准
		int index = left;
        int pivot = array[right]; 
	    //将所有小于标准的点移动到index的左侧	
        for (int i=left; i<right; i++)
        {
                if (array[i] < pivot)    
                        swap(array[index++],array[i]);
        }
		//将标准与index指向的元素交换,返回index,即分割位置
        swap(array[right],array[index]);
        return index;
}

随机分割算法:
int random(int floor,int ceil)
{
		srand(time(0));
		return floor+random()%(ceil-floor+1);
}
int randomizedPartition(int array[],int left,int right)
{
		//随机一个元素作为分割的标准
		int i=random(left,right);
		//将标准移动到最右侧
        swap(array[right],array[i]);
        partition(array,left,right);
}

快速排序:

void qsort(int array[],int left,int right)
{
		if(left<right)
		{
			int mid;
			//mid=randomizedPartition(array,left,right);
                        mid=partition(array,left,right);
		        qsort(array,left,mid-1);
		        qsort(array,mid+1,right);
		}
}
两种形式的分割算法的单词输出为:

非随机算法:


随机算法:



STL之partition和stable_partition

先看代码,再解释函数的作用        bool Fun(char c) { return c=='*'; } int main() { string str = "***b**a**c...
  • KWSY2008
  • KWSY2008
  • 2015年03月17日 16:25
  • 2685

【算法】划分 partition

STL 中的划分算法 partition 的函数原型如下 template ForwardIterator partition(ForwardIterator first, ForwardItera...
  • Justme0
  • Justme0
  • 2014年04月25日 21:44
  • 5076

STL algorithm算法partition, partition_copy(43)

partition原型: td::partition C++98 C++11 template ForwardIterator partition (Fo...
  • guang_jing
  • guang_jing
  • 2014年09月22日 14:58
  • 1487

STL_算法_重排和分区(random_shuffle、partition、stable_partition)

C++ Primer 学习中。。。   简单记录下我的学习过程 (代码为主) //所有容器适用//所有容器适用 random_shuffle(b,e)       //随机重排 rando...
  • u010579068
  • u010579068
  • 2016年01月28日 19:33
  • 908

【算法】划分 partition

STL 中的划分算法 partition 的函数原型如下 template ForwardIterator partition(ForwardIterator first, ForwardItera...
  • Justme0
  • Justme0
  • 2014年04月25日 21:44
  • 5076

C++中有关STL自带的排序函数:sort、qsort

sort函数见下表: 函数名 功能描述 sort 对给定区间所有元素进行排序 stable_sort 对给定区间所有元素进行稳定排序 partial_...
  • u012209626
  • u012209626
  • 2015年09月28日 22:49
  • 2454

快速排序算法(Qsort)

或许在面试与笔试中问的最多的就是这个快速排序算法(Quick sort)。 其实吧,这个快速排序的思想呢,很简单。 所谓快速排序就是,起始的时候选择一个关键值key一般为数组的第一个值,然后将数组分割...
  • xygl2009
  • xygl2009
  • 2015年07月11日 00:16
  • 638

qsort 排序算法(七种)

qsort函数是ANSI C标准中提供的,其声明在stdlib.h文件中,是根据二分发写的,其时间复杂度为n*log(n),其结构为: void qsort(void *base,size_...
  • yangshuo528
  • yangshuo528
  • 2014年05月27日 13:29
  • 962

快速排序qsort算法实例

快速排序算法是一项非常有用而且高效的排序算法,运算复杂度为O(nlogn)量级,这个算法我是刚开始在学数据结构的时候上机做的一个程序,现在 算法:分治法,主要通过递归来实现#include"iost...
  • Michael_June
  • Michael_June
  • 2016年11月13日 22:22
  • 290

C++ STL入门《算法入门经典》

一)C++基础 1.头文件:C++能编译大多数C语言程序。在C头文件之前加一个小写的c字母,然后去掉.h后缀。 2.引用:在参数名之前加一个“&”符号,就表示这个参数按照传引用(byreference...
  • wyi06
  • wyi06
  • 2017年03月10日 16:43
  • 383
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:STL经典算法集锦<三>之partition与qsort
举报原因:
原因补充:

(最多只允许输入30个字)