关于quick sort
2014-01-07 19:41
417 查看
最原始的quick sort就是算法导论上的了:
http://wenku.baidu.com/link?url=wXRMQ-8OowOYvTuLYRYWikM9Ui03LdrFCi2y4zzpsnbD2mq_FtLPFYeCpwE_RfutNGP1nz1nY7yiPAdkz3GAnvJiGPJT2Ew0Ry5WgH9-y7u&qq-pf-to=pcqq.c2c
利用快排思想取第k个位置的数:
#include<stdio.h> void swap(int *a, int *b) { int tmp = *a; *a = *b; *b = tmp; } int partition(int a[], int s, int e) { /* 随机取key srand(time(NULL)); int dx = s + rand() % (e - s + 1); swap(&a[dx], &a[e]); */ int tmp = a[e], mid = s; for(int i = s; i <= e; i++) if(a[i] < tmp) swap(&a[mid++], &a[i]); swap(&a[mid], &a[e]); return mid; } void Qsort(int a[], int s, int e) { if(s < e) { int p = partition(a, s, e); Qsort(a, s, p - 1); Qsort(a, p + 1, e); } } main() { int nums[10] = {1, -1, 2, -2, -2, -3, 1, 5, 0, 10}; Qsort(nums, 0, 9); for(int i = 0; i < 10; i++) printf("%d\n", nums[i]); }至于quick sort各种优化方法与测试,详见这篇文章(找不到原文链接,只能贴百度文库的了):
http://wenku.baidu.com/link?url=wXRMQ-8OowOYvTuLYRYWikM9Ui03LdrFCi2y4zzpsnbD2mq_FtLPFYeCpwE_RfutNGP1nz1nY7yiPAdkz3GAnvJiGPJT2Ew0Ry5WgH9-y7u&qq-pf-to=pcqq.c2c
利用快排思想取第k个位置的数:
int partition(int a[], int s, int e, int k)//注意k是下标,不是第k个,和描述有些差距 { int tmp = a[e], mid = s; for(int i = s; i <= e; i++) if(a[i] > tmp) swap(&a[mid++], &a[i]); swap(&a[mid], &a[e]); if(mid == k) return a[mid]; else if(mid > k) return partition(a, s, mid - 1, k); else return partition(a, mid + 1, e, k); }//只需要partition和swap,不用写Qsort是第k个位置的所以如果数据不重复可以得出第k大(或小)的数,数据重复的话,师兄说可以用hash表去重,等我研究后了再贴出来。
相关文章推荐
- 【20】宁以pass-by-reference-to-const替换pass-by-value
- UITableViewCell unable to dequeue a cell with identifier Cell - must register a nib or a class for the identifier or connect a prototype cell
- ${pageContext.request.contextPath} JSP取得绝对路径
- (13)JavaGUI图形化界面
- soapUI pro 4.0.1破解
- 优化UITableView性能
- using update panel do sync job , update UI control async
- Android 线程4件套 MessageQueue Message Looper Handler之Looper
- (standard c libraries translation )seteuid
- UITableViewCell里加了个UISwitch
- Qt Creator 为什么编译一直出现When executing build step 'qmake'呢?
- HUE 报错误:Filesystem root '/' should be owned by 'hdfs'
- 交互设计[3]--点石成金
- 交互设计[3]--点石成金
- IOS开发之--UIScrollView pagingEnabled自定义翻页宽度
- Quick Subversion (SVN) Server Setup on Ubuntu Server 12.04
- blazeds获取request、response、session
- IQueryable<T>和IEnumerable<T>的区别
- Disruptor为什么会比BlockingQueue更快?
- Field requires API level 5 (current min is 1) 问题的解决