MOOC清华《程序设计基础》第5章:快速排序(不分配动态空间-算法三)
来源:互联网 发布:统赢编程说明书 编辑:程序博客网 时间:2024/05/29 20:00
本算法核心代码翻译自《算法导论》(第三版)第7章:快速排序。这段代码也要求所排序列是“左闭右闭”区间,跟清华大学邓俊辉老师在《数据结构》MOOC课程中所讲的业界一般默认的“左闭右开”区间的序列不一样。“左闭右开”区间的快速排序在算法一和算法二中有,但是算法一和算法二我不开源哦!需要的可以联系我的QQ购买:3121432464,备注要说明原因。算法一和算法二的参考价格:1000元/个,先付款、后给代码,非诚勿扰。
#include <iostream>using namespace std;#define N 20int recursion_time = 0;//定义显示递归次数的全局变量 int main(){int a[N] = {30,38,3,32,15, 1,41,47,59,80, 6,93,78,18,65, 60,51,22,31,17};//测试数据前18个元素都不变,最后的元素分为四种情况测试://整体个数为奇数个(19)且最末元素比最首元素大(31)//整体个数为奇数个(19)且最末元素比最首元素小(17)//整体个数为偶数个(20)且最末元素比最首元素大(17,31)//整体个数为偶数个(20)且最末元素比最首元素小(31,17) void QuickSort(int *array, int start, int end);void OutputOfArray(int *array, int n);cout << "原数组为:" << endl;OutputOfArray(a, N);QuickSort(a, 0, N - 1);cout << "排序后的数组为:" << endl;OutputOfArray(a, N);return 0;}//以下两个函数的代码翻译自《算法导论》第三版中的快速排序算法 void QuickSort(int *A, int p, int r){int Partition(int *A, int p, int r);int q = 0;if(p < r) {q = Partition(A, p, r);//以下12行是测试代码 recursion_time++;cout << "第" << recursion_time <<"轮递归的结果为:" << endl;for(int i = p; i <= q - 1; i++){cout << "a[" << i << "]=" << A[i] << "; ";}cout << "pivot=" << "a[" << q << "]=" << A[q] << "; ";for(int i = q + 1; i <= r; i++){cout << "a[" << i << "]=" << A[i] << "; ";}cout << endl << endl;//输出本轮递归的结果,注意排版格式 QuickSort(A, p, q - 1);QuickSort(A, q + 1, r);} }int Partition(int *A, int p, int r){int x = A[r];int i = p - 1;int temp = 0;for(int j = p; j <= r - 1; j++) {if(A[j] <= x){i = i + 1;temp = A[i];A[i] = A[j];A[j] = temp;}}temp = A[i + 1];A[i + 1] = A[r];A[r] = temp;return i + 1;}void OutputOfArray(int *array, int n) { for(int i = 0; i < n; i++) cout << array[i] << '\t'; cout << endl; }
注意第22行最后一个参数要在宏N的基础上减1,否则会发生数组下标越界的错误。
测试结果:
阅读全文
0 0
- MOOC清华《程序设计基础》第5章:快速排序(不分配动态空间-算法三)
- MOOC清华《程序设计基础》第5章:快速排序(不分配动态空间-算法一)
- MOOC清华《程序设计基础》第5章:快速排序(不分配动态空间-算法二)
- MOOC清华《程序设计基础》第5章:快速排序(分配动态空间)
- MOOC清华《程序设计基础》第5章第4题:用递归算法实现选择排序
- MOOC清华《程序设计基础》第5章:归并排序
- MOOC清华《程序设计基础》第4章第3题:不相同的个数(用筛法做)
- MOOC清华《程序设计基础》第6章第3题:最大乘积问题(动态规划)
- MOOC清华《程序设计基础》第5章第5题:用递归算法实现数组求和
- MOOC清华《程序设计基础》第5章第3题:用递归算法求最大公约数
- MOOC清华《程序设计基础》第6章:橱窗插花问题(动态规划,输出方法一)
- MOOC清华《程序设计基础》第6章:橱窗插花问题(动态规划,输出方法二)
- MOOC清华《程序设计基础》第6章:最长公共子序列问题(动态规划)
- MOOC清华《程序设计基础》第4章:整理扑克牌(插入排序)
- MOOC清华《程序设计基础》第4章:整理扑克牌(插入排序精简版)
- MOOC清华《程序设计基础》第4章:整理扑克牌(选择排序)
- MOOC清华《程序设计基础》第4章:插入排序(函数写法)
- MOOC清华《程序设计基础》第4章:选择排序(函数写法)
- 顺序统计树简单实现
- 常用设计模式总结
- HTML <meter>元素用来显示已知范围的标量值或者分数值。
- 深入浅出JMS(一)--JMS基本概念
- 页面的建立
- MOOC清华《程序设计基础》第5章:快速排序(不分配动态空间-算法三)
- C#基础知识延伸
- Spark中宽依赖和窄依赖
- window快捷键
- Java基础知识总结(绝对经典)
- 数据压缩原理 实验五 JPEG原理分析及JPEG解码器的调试
- 二分法查找升序和降序集合
- STM32寄存器操作和库函数操作区别
- 完全覆盖问题