改进版高速排序(平均复杂度O(NlogN))
#include<iostream>
using namespace std; #define MAXSIZE 21
typedef int SqList[MAXSIZE];
#define ElementType int
void Swap(int &a, int &b)
{
a = a^b;
b = a^b;
a = a^b;
} //*********************************************************
ElementType Median3( ElementType *A, int Left, int Right )
{
int Center = ( Left + Right ) / 2; if ( A[ Left ] > A[ Center ] )
Swap( A[ Left ], A[ Center ] ); if ( A[ Left ] > A[ Right ] )
Swap( A[ Left ], A[ Right ] ); if ( A[ Center ] < A[ Right ] )
Swap( A[ Center ], A[ Right ] ); return A[ Right ]; /* 返回pivot */
} void Quicksort( ElementType *A, int Left, int Right )
{
if(Left>=Right){return ;}
{
int Pivot = Median3( A, Left, Right );
int i = Left;
int j = Right; for( ; ; ) {
while ( i<j && A[i] < Pivot ) { ++i; }
// 注意这里是>=否则当Pivot和头尾数据相等时就会死循环
while ( i<j && A[j] >= Pivot ) { --j; } if ( i < j )
Swap( A[i], A[j] );
else break;
}
Swap( A[i], A[Right] ); Quicksort( A, Left, i-1 );
Quicksort( A, i+1, Right ); } } void Quick_Sort(ElementType *A,int N)//接口
{
Quicksort( A, 0, N-1 );
}
////////////////////////////////////////////////////// void main()
{
SqList sq = {49,38, 65, 97, 76, 13, 27, 49 }; Quick_Sort( sq,8);//
for (int i = 0; i < 8; i++)
{
cout << sq[i] <<",";
}
cout << endl; }
为了尽可能减少复杂度,出现了一些边界控制的问题。在老师的帮助下,完毕了代码。
有不足之处。还望指出。
改进版高速排序(平均复杂度O(NlogN))的更多相关文章
- C#实现(递归和非递归)高速排序和简单排序等一系列排序算法
本人由于近期工作用到了一些排序算法.就把几个简单的排序算法.想冒泡排序,选择排序,插入排序.奇偶排序和高速排序等整理了出来,代码用C#代码实现,而且通过了測试.希望能给大家提供參考. ...
- 【从零学习经典算法系列】分治策略实例——高速排序(QuickSort)
在前面的博文(http://blog.csdn.net/jasonding1354/article/details/37736555)中介绍了作为分治策略的经典实例,即归并排序.并给出了递归形式和循环 ...
- 高速排序及优化(Java版)
高速排序(Quicksort)是对冒泡排序的一种改进. 高速排序由C. A. R. Hoare在1962年提出. 一次高速排序具体过程: 选择数组第一个值作为枢轴值. 代码实现: package Qu ...
- 高速排序——JAVA实现(图文并茂)
高快省的排序算法 有没有既不浪费空间又能够快一点的排序算法呢?那就是"高速排序"啦! 光听这个名字是不是就认为非常高端呢. 如果我们如今对"6 1 2 7 9 3 4 5 ...
- 《算法导论》 — Chapter 7 高速排序
序 高速排序(QuickSort)也是一种排序算法,对包括n个数组的输入数组.最坏情况执行时间为O(n^2). 尽管这个最坏情况执行时间比較差.可是高速排序一般是用于排序的最佳有用选择.这是由于其平均 ...
- 高速排序,归并排序,堆排序python实现
高速排序的时间复杂度最好情况下为O(n*logn),最坏情况下为O(n^2),平均情况下为O(n*logn),是不稳定的排序 归并排序的时间复杂度最好情况下为O(n*logn),最坏情况下为O(n*l ...
- 数据结构( Pyhon 语言描述 ) — — 第3章:搜索、排序和复杂度分析
评估算法的性能 评价标准 正确性 可读性和易维护性 运行时间性能 空间性能(内存) 度量算法的运行时间 示例 """ Print the running times fo ...
- 排序(5)---------高速排序(C语言实现)
继shell发明了shell排序过后呢,各位计算机界的大牛们又開始不爽了,为什么他能发明.我就不能发明呢.于是又有个哥们蹦出来了.哎...那么多排序,就木有一个排序是中国人发明的.顺便吐槽一下,一百年 ...
- 高速排序-c++(分别用数组和容器实现)
/********************************************************************** *版权全部 (C)2014, cheng yang. * ...
随机推荐
- Java的线程和多线程教程
Java线程(Java Thread)是执行某些任务的一种轻量级进程.Java中的Thread类提供了多线程(multi-threading)功能,应用程序能够创建多个线程并同一时候执行. 在一个应用 ...
- Tasker : Task / Shortcut Widgets
Task / Shortcut Widgets The standard way of running a Tasker task is by attaching it to a profile wh ...
- c#分页工具类,完美实现List分页
using System; using System.Collections.Generic; using System.Linq; using System.Web; namespace Proje ...
- 制作MACOSX10.10.3/10.9安装启动盘U盘的教程
下载MACOSX 10.10.3/10.9镜像文件,下载地址http://www.chinamac.com/download/mac14032.html1.准备好你需要的大于等于6G以上的U盘或者移动 ...
- 《学习opencv》笔记——矩阵和图像操作——cvAbs,cvAbsDiff and cvAbsDiffS
矩阵和图像的操作 (1)cvAbs,cvAbsdiff,cvAbsDiffS 它们的结构为: void cvAbs( //取src中元素的绝对值,写到dst中 const CvArr* src, co ...
- PhotoShop CS6 在2K屏幕下标题菜单等字体太小
对于此类问题,我更喜欢直接了当,不作解释,解决方法如下(大面积参考互联网内容): (1)Win+R按键打开运行对话框, 输入regedit,打开注册表. (2)展开HKEY_LOCAL_MACHINE ...
- 80x86 CPU 的工作模式
8086/8088微处理器只有一种工作模式:实地址模式. 32为的80x86微处理器有3种工作模式:实地址模式.保护模式和虚拟8086模式. 实地址模式 对于8086/8088微处理器,实模式是它 ...
- CentOS 6.5安装配置Nginx
Ubuntu下安装nginx,直接apt-get install nginx就行了,很方便. 但是今天装了CentOS6.5,直接yum install nginx不行,要先处理下源,下面是安装完整流 ...
- Informatica 常用组件Lookup缓存之五 使用动态查找高速缓存
对于关系查找,当目标表也是查找表时,可能要配置转换以使用动态高速缓存.PowerCenter 将在处理第一个查找请求时创建高速缓存.它将根据查找条件为传递给转换的每行查询高速缓存.当您使用动态高速缓存 ...
- Ubuntu12.04 64bit 下安装VNC server
1. 安装gonme核心包(如果是字符界面的话) apt-get install x-window-system-coreapt-get install gnome-core (下载完成后需要安装dg ...