排序:快速排序
来源:互联网 发布:时间序列预测值算法 编辑:程序博客网 时间:2024/06/05 00:29
时间复杂度 最理想 O(nlogn) 最差时间O(n^2)
像合并排序一样,快速排序也是基于分治模式的。下面是对一个典型子数组A[p..r]排序的分治过程的三个步骤:
分解:
数组A[p..r]]被划分成两个(可能空)子数组A[p..q-1]和A[q+1..r],使得A[p..q-1]中的每个元素都小于等于A(q),而且,小于等于A[q+1..r]中的元素。下标q也在这个划分过程中进行计算。
解决:
通过递归调用快速排序,对子数组A[p..q-1]和A[q+1..r]排序。
合并:
因为两个子数组是就地排序的,将它们的合并不需要操作:整个数组A[p..r]已排序
快速排序:
QUICKSORT(A,p,r)if p<r then q=PARTITION(A,p,r) QUICKSORT(A,p,q-1) QUICKSORT(A,q+1,r)
数组划分:
PARTITION(A,p,r)x=A[r]i=p-1for j=p to r-1 do if A[j]<=x then i=i+1 exchange A[i]<->A[j]exchange A[i+1]<->A[r]return i+1
可参照c代码:
#include <stdio.h> int partion(int a[],int p,int r){ int x=a[r], i=p-1,tem; for (int j=p;j<r;j++){ if (a[j]<=x){ tem=a[i+1]; a[i+1]=a[j]; a[j]=tem; i++; } } tem=a[r]; a[r]=a[i+1]; a[i+1]=tem; return i+1;} void QuickSort(int a[],int p,int r){ if (p<r){ int q=partion(a,p,r); QuickSort(a,p,q-1); QuickSort(a,q+1,r); }} void main(){ int array[]={0,-2,11,-4,13,-5,14,-43}; QuickSort(array,0,7); for(int i=0;i<=7;i++) printf("%d ",array[i]); printf("\n"); }
选取枢纽元问题
1、糟糕的方法
通常的做法是选择数组中第一个元素作为枢纽元,如果输入是随机的,那么这是可以接受的。但是,如果输入序列是预排序的或者是反序的,那么依据这样的枢纽元进行划
分则会出现相当糟糕的情况,因为可能所有的元素不是被划入S1,就是都被划入S2中。
2、较好的方法
一个比较好的做法是随机选取枢纽元,一般来说,这种策略是比较妥当的。
3、三数取取中值方法
例如,输入序列为 8, 1, 4, 9, 6, 3, 5, 2, 7, 0 ,它的左边元素为8,右边元素为0,中间位置|_left+right)/2_|上的元素为6,于是枢纽元为6.显然,使用三数中值分割法消除了预
排序输入的坏情形,并且减少了快速排序大约5%(此为前人实验所得数据,无法具体证明)的运行时间。
- 排序之快速排序
- 排序算法--快速排序
- 插入排序,快速排序
- 快速排序 冒泡排序
- 排序算法--快速排序
- 排序之 快速排序
- 排序之快速排序
- 快速排序、冒泡排序
- 排序---快速排序
- 排序4快速排序
- 【排序】快速排序
- 排序算法---快速排序
- 快速排序,选择排序
- 排序算法-快速排序
- 【排序】快速排序
- 【基础排序】快速排序
- 排序之------快速排序
- 排序–快速排序
- 对于session与cookie机制,自己的一点理解
- asp.net中的跨页发送(利用PreviousPage.FindControl()方法取值)
- 《Oracle Applications DBA 基础》- 9 - Concurrent Processing
- 企业要什么样的“云”
- 第一篇呦~
- 排序:快速排序
- Linux rm 那点事
- 理解HTTP/304响应
- think in java interview-高级开发人员面试宝典2
- 内核裁剪笔记
- linux-3.2.36内核启动4-setup_arch中的内存初始化3(arm平台 bootmem_init源码分析)
- ffmpeg深入研究
- 《Oracle Applications DBA 基础》- 10 Custom Application Integration
- QSqlDatabasePrivate::addDatabase: duplicate connection name 'qt_sql_default_connection', old connect