算法基础4:快速排序(随机化版本)
2017-03-18 20:12
429 查看
#include <stdio.h> #include <stdlib.h> #define MAXLEN 100 int 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'); }
相关文章推荐
- 算法设计之快速排序的随机化版本 (C++实现)
- 算法导论:快速排序及其随机化版本
- 快速排序的随机化版本
- 算法基础之排序篇-快速排序
- 经典算法--快速排序的随机化版本
- 算法导论7.3快速排序的随机化版本
- 【基础算法】排序-复杂排序之二(快速排序)
- 基本排序方法及分析(九):Randomized-Quicksort快速排序的随机化版本
- 快速排序的随机化版本
- 快速排序分析与随机化算法+快速排序的随机化版本
- php四种基础算法:冒泡,选择,插入和快速排序法
- 基础算法之快速排序
- 快速排序(算法导论中的版本)
- 基础算法2——冒泡排序和快速排序
- 算法基础(3)分治策略之快速排序
- 算法实践篇-快速排序-随机化版本
- 第七章快速排序之“快速排序的随机化版本RANDOM-QUICKSORT”
- 中级程序员必须懂的20大基础算法(1)——快速排序
- 基础排序算法之快速排序(Quick Sort)
- 基础算法--排序:之快速排序