算法基础4:快速排序(随机化版本)
来源:互联网 发布:mui实例源码 编辑:程序博客网 时间:2024/05/30 04:39
#include <stdio.h>#include <stdlib.h>#define MAXLEN 100int readSeq(int a[]); // 读入一个整数序列,返回读入的整数的个数void showSeq(int a[], int n);void quickSort(int a[], int p, int r);int partition(int a[], int p, int r);void swap(int* a, int* b);int main(){ int n, nums[MAXLEN]; while ((n = readSeq(nums)) > 0) // 如果输入的序列长度大于零就执行排序,否则退出 { showSeq(nums, n); quickSort(nums, 0, n - 1); showSeq(nums, n); } return 0;}void swap(int* a, int* b){ int tmp = *a; *a = *b; *b = tmp;}int partition(int a[], int p, int r) // 如果不理解此版本的划分函数,参考《算法导论》第95~96页{ srand(time(0)); swap(&a[r], &a[p+rand()%(r-p+1)]); // 随机选取一个pivot int j, i = p - 1; for (j = p; j < r; j++) if (a[j] < a[r]) swap(&a[++i], &a[j]); swap(&a[++i], &a[r]); return i;}void quickSort(int a[], int p, int r){ if (p < r) { int q = partition(a, p, r); quickSort(a, p, q - 1); quickSort(a, q + 1, r); }}int readSeq(int a[]){ int n, i = 0; scanf("%d", &n); while (i < n) scanf("%d", &a[i++]); return i; // 如果n=0,i也为0}void showSeq(int a[], int n){ int i = 0; while (i < n) printf("%d ", a[i++]); putchar('\n');}
1 0
- 算法基础4:快速排序(随机化版本)
- 算法实践篇-快速排序-随机化版本
- 经典算法--快速排序的随机化版本
- 算法导论:快速排序及其随机化版本
- 快速排序(随机化版本)
- 快速排序随机化版本
- 快速排序随机化版本
- 快速排序 随机化版本
- 随机化快速排序算法
- 随机化快速排序算法
- 排序算法之快速排序的随机化版本
- 快速排序分析与随机化算法+快速排序的随机化版本
- 快速排序的随机化版本
- 快速排序的随机化版本
- 快速排序的随机化版本
- 快速排序(随机化版本)
- 快速排序的随机化版本
- 快速排序(随机化版本)
- HDU 3193 Find the hotel(RMQ)
- 求Sn=1!+2!+3!+4!+5!+…+n!
- Spring Aop包版本不对应IllegalArgumentException: error at ::0 can't find referenced pointcut point_cut
- mybatis动态sql
- ListView 的item和子控件之间的焦点用法:android:descendantFocusability用法简析
- 算法基础4:快速排序(随机化版本)
- ILSpy反编译C#web程序
- 【linux】中的Atime,Ctime,Mtime
- cxf整合进项目后无法访问Can't find the the request for http://.........
- Base64算法的三种方法
- CoreData(数据库升级 )版本迁移-iOS App升级安装
- 微信小程序,ios上日期转时间戳出现的问题
- JPA的查询语言—使用原生SQL
- [类欧几里得算法 线段树] BZOJ 1938 [CROATIAN2010] ALADIN