C++快速排序(以中间元素为元点)

#include <iostream>
using namespace std;
void Grial(int a[],int x,int y)
{
	if(x>=y)return ;
	int i=x;
	int j=y;
	int temp;
	int key=a[(i+j)/2];
	while(i<j)
	{
		while(a[i]<key)i++;//找到第一个比key大的数
		while(a[j]>key)j--;//找到第一个比key小的数
		if(i<=j)
		{
			temp=a[i];a[i]=a[j];a[j]=temp;
			i++;
			j--;
		}
	}
//当i<j时,把比key小的与比key大的交换,直到i>j时,确定了中值,小于等于j的数组划分为左边较小的组,大于等于i的划分为右边较大的组,
//将数组分成了2部分,再分别递归比较.最后当x<y时跳出递归.
	Grial(a,x,j);
	Grial(a,i,y);
}
int main()
{
	int a[]={2,3,1,94,53,3,0};
	Grial(a,0,6);
	for(int i=0;i<7;i++)
	{
		cout<<a[i]<<"  ";
	}
	cout<<endl;
	return 0;
}

时间: 2024-10-16 04:14:46

C++快速排序(以中间元素为元点)的相关文章

如何表示只有一个元素的元祖

在Python中我们经常会用到几种序列类型,列表(List),元祖(Tuple)与字典(Dict) 其中元祖使用小括号来表示,且不可以修改元素值 t = ('a', 'b', 1, 2) 但是 当元祖只有一个元素的时候比较特殊,用type()打印结果 t = (1) print(type(t)) # <class 'int'> 明明是元祖的格式,为什么识别为 int 型呢 这是因为当只有一个元素的时候,对于int型或字符型来讲,只是相当于运算的一个优先级,系统没有当作元祖的格式 如果要表示只有

面试之路(22)-快速排序随机选择元素的优雅解法

关于常规解法,请参考上一篇博客,链接如下: 面试之路(19)-快速排序详解 介绍一种优雅的解法 public int partition(int data[],int length,int start,int end) throws Exception{ if(data == null || length <= 0||start < 0||end >= length){ throw new Exception("invalid data"); } //RandomIn

快速排序查找匹配元素最前面是否有对应得元素

$arr = [1,2,3,3,4,5,6]; function binSearch($arr,$num,$start,$end){ if($start > $end){ return -1; } $mid = floor(($start+$end)/2); $midValue = $arr[$mid]; if($num < $midValue){ $mid = $mid-1; return binSearch($arr,$num,$start,$mid); }elseif($num >

排序算法----快速排序(链表形式)

单链表形式实现排序算法. 这个快速排序主要利用递归调用.包含4个文件,头文件QuickSort.h,fatal.h,库函数QuickSort.c,测试文件TestQuickSort. QuickSort.h 1 typedef long ElementType; 2 #ifndef _List_H//如果没有编译过 3 #include<stdbool.h> 4 struct Node; 5 typedef struct Node *PtrToNode; 6 typedef PtrToNode

Swift实现的快速排序及sorted方法的对比

Swift语言有着优秀的函数式编程能力,面试的时候面试官都喜欢问我们快速排序,那么用Swift如何实现一个快速排序呢?首先扩展Array类: extension Array { var decompose : (head: T, tail: [T])? { return (count > 0) ? (self[0], Array(self[1..<count])) : nil } } 属性decompose的作用是返回数组中的第一个元素和剩下的元素,注意这个属性是可选型的,当count为0的时

排序算法 之 快速排序

快速排序是基于分治思想的一种排序算法,就像该方法的名字一样,速度比较快,所以叫做快速排序:它的平均时间复杂度为O(N*logN),最坏时间复杂度为O(n2),由于快速排序在序列元素数量多的时候速度比较快,所以很多语言内置的排序方法也是用快速排序实现的.快速排序也有很多优化的版本,比如在排序时基数的选择等等-下面就说一下一般的快速排序的实现. 基本思想: 快速排序的基本思想就是,先从待排序的序列中任选一个元素作为基数,然后将序列中的其他小于基数的元素放在基数的左边,大于或等于基数的元素放在基数的右

Python笔记_01列表 和元祖

Python笔记 第一章 列表和元祖 1.通用序列操作 所有序列都可以进行某些特定操作,包括:索引(indexing).分片(slicing).加(adding).乘(multiplying)以及检查某元素是否属于列表成员. 迭代:依次对序列中的每个元素重复执行某些操作. 序列的索引:通过元素在列表中的位置可以定位到该元素,这就是列表的索引,使用类似于list[0]对元素进行索引,索引0指向第一个元素.也可使用负数对元素进行索引,使用负数对元素索引时,列表中的最后一个元素由-1表示,例如list

Python_列表和元祖

author:lxy list(列表) 列表是Python的一种内置数据类型,list是一种有序的集合,可以随时添加和删除其中的元素. 获取list中的元素用角标获取,角标可以使用正角标,也可以使用负角标,越界时抛出IndexErro list中的元素的数据类型也可以不一样(就像Java一样),也可以在list内放另外一个list,这样也就形成了一个多维集合 list的方法 len(list)                 #获取lest长度 append()        #末尾追加元素 p

排序总结之快速排序

简介: 快速排序是由东尼·霍尔所发展的一种排序算法.在平均状况下,排序 n 个项目要Ο(n log n)次比较.在最坏状况下则需要Ο(n2)次比较,但这种状况并不常见.事实上,快速排序通常明显比其他Ο(n log n) 算法更快,因为它的内部循环(inner loop)可以在大部分的架构上很有效率地被实现出来.快速排序使用分治法(Divide and conquer)策略来把一个串行(list)分为两个子串行(sub-lists). 步骤: 1 ,从数列中挑出一个元素,称为 "基准"