算法导论-第7章 - 快速排序
来源:互联网 发布:电信4g网络接入点设置 编辑:程序博客网 时间:2024/05/17 01:08
7.1 <<-------------------------------------普通快速排序---------------------------------------->>
与归并排序一样,快速排序也使用了分治思想。数组被划分为两个(可能为空)子数组a[p...q-1]和a[q+1...r],使得a[p...q-1]的每一个元素都小于a[q],而a[q]也都小于等于a[q+1...r]中的每一个元素
void Swap(int *a, int *b){ int t; t = *a; *a = *b; *b = t;}int Partion(int a[], int low, int high){ int x; int i, j; x = a[high]; i = low; for(j = low; j < high; j++) { if(a[j] <= x) { Swap(&a[i], &a[j]); i++; } } Swap(&a[i], &a[high]); return i;}void QuickSort(int a[], int low, int high){ int mid; if(low < high) { mid = Partion(a, low, high); QuickSort(a, low, mid-1); QuickSort(a, mid+1, high); }}int main(void){ int a[10] = {2, 5, 7, 9, 0, 1, 3, 4, 8, 6}; int i; QuickSort(a, 0, 9); for(i = 0; i < 10; i++) printf("%d ", a[i]); return 0;}
另外一种普通快排,和上一个类似。不同的是它每次一区间数组的第一个为判断节点,就只有Partion函数有改变,其他的函数可以参照上面的
int Partion(int a[], int low, int high){ int x; int i, j; x = a[low]; i = high; for(j = high; j > low; j--) { if(a[j] >= x) { Swap(&a[i], &a[j]); i--; } } Swap(&a[i], &a[low]); return i;}
当快速排序终止时,它将数组分为3个集合,所有小于等于x元素的集合,大于x的集合和只有一个x一个元素的集合
快速排序的性能:
划分平衡时,快排性能和归并排序一样,如果不平衡,则接近于插入排序
平衡的划分:
快排的平均运行时间接近于其最好情况((nlog(n))),而非最坏情况((n^2))
快排可看成快速排列递归树
7.1 <<-------------------------------------快速排列的随机化版本---------------------------------------->>
快速排序的随机化对PARTION和QUICKSORT代码改动很小,在新的划分程序中,只是在划分前进行一次交换
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>-------------------------------------------------------------------
其实还有另外一种形式的快速排序的方法,但是实质是一样的,这种方式的快速排序也是比较常用的。如下所示:
int QuickPass(int a[], int low, int high){ int x = a[low]; if(low < high) { while(low < high) { while(low<high && a[high]>=x) high--; a[low] = a[high]; while(low<high && a[low]<=x) low++; a[high] = a[low]; } a[low] = x; } return low;}void QuickSort(int a[], int low, int high){ int mid; if(low < high) { mid = QuickPass(a, low, high); QuickSort(a, low, mid-1); QuickSort(a, mid+1, high); }}
个人感觉这种方法初看没有《算法导论》中的快速排序方法理解起来简单,但是理解后就会发现这种方式的排序也是很好的。^_^没有了两个数之间的数据交换,只是简单的赋值操作。
- 【算法导论 第7章 快速排序】
- 算法导论 第7章 快速排序
- 《算法导论》 第7章 快速排序
- 算法导论 第7章 快速排序
- 算法导论-第7章 - 快速排序
- 【算法导论 第7章 快速排序】
- 算法导论-第7章-快速排序算法
- 算法导论学习笔记-第7章 快速排序
- 算法导论代码 第7章 快速排序
- 《算法导论》第7章 快速排序 (四种变形)
- 算法导论第7章快速排序答案
- 算法导论 第7章 快速排序 学习总结
- 《算法导论》笔记 第7章 7.4快速排序分析
- 算法导论第7章—快速排序
- 算法导论学习笔记 第7章 快速排序
- 《算法导论》第7章 快速排序 个人笔记
- 《算法导论》笔记 第7章 7.1快速排序的描述
- 《算法导论》笔记 第7章 7.2快速排序的性能
- Python:urllib 和urllib2之间的区别
- 帮助文档(3)
- Python Routes map.resource详解
- 【iOS开发-13】大神器:如何利用cocoapods使用第三方类库,以针对UISwitch的第三方类库为例
- 解决Informatica Powercenter IP地址改变后不能正常启动问题
- 算法导论-第7章 - 快速排序
- 多线程执行CPU过高问题
- 帮助文档(4)
- mysql
- 船舶爬虫出现过的问题
- MyEclipse优化设置(myeclipse突然卡死或卡住的问题及其他优化)
- Android Volley框架的几种post提交请求方式[转]
- YUV420数据转为IplImage格式
- 利用事物执行SQL语句