MOOC清华《程序设计基础》第5章:快速排序(分配动态空间)
来源:互联网 发布:zuk z2优化相机 编辑:程序博客网 时间:2024/05/16 10:20
#include <iostream>using namespace std;#define N 18int main(){int a[N] = {30,38,3,32,15,1,41,47,59,80,6,93,78,18,65,60,51,22};void QuickSort(int *array, int length);void OutputOfArray(int *array, int n);cout << "原数组为:" << endl;OutputOfArray(a, N);QuickSort(a, N);cout << "排序后的数组为:" << endl;OutputOfArray(a, N);return 0;}//经典的快速排序算法不同于本例,它不需要分配动态空间,而是巧妙地原地“倒换”元素来实现 void QuickSort(int *array, int length){//递归终止条件if(length <= 1)return; //按最坏可能,为两个子数组分配空间 int *left = new int[length], *right = new int[length];//设置两个子数组长度的初值(为零) int left_index = 0, right_index = 0;//第一步,拆分,要求左半部分都比参照元素小,右半部分都比参照元素大int key = array[0]; //以 0 号元素为参照,有的教材上以任意元素为参照,也许更好 for(int i = 1; i < length; i++){if(array[i] < key)left[left_index++] = array[i];if(array[i] >= key)right[right_index++] = array[i];}//第二步,对子数组进行排序 QuickSort(left, left_index);QuickSort(right, right_index);//第三步,合并子数组,不同于归并排序,快排中的左右已经有序,所以不必比较大小 int index = 0;for(int i = 0; i < left_index; i++)array[index++] = left[i];array[index++] = key; //不要忘了参照元素 for(int i = 0; i < right_index; i++)array[index++] = right[i];//释放空间delete[] left;delete[] right; }void OutputOfArray(int *array, int n) { for(int i = 0; i < n; i++) cout << array[i] << '\t'; cout << endl; }
经典的快速排序算法不同于本例,它不需要分配动态空间,而是巧妙地原地“倒换”元素来实现。
偶数个元素的排序结果:
奇数个元素的排序结果:
阅读全文
0 0
- MOOC清华《程序设计基础》第5章:快速排序(分配动态空间)
- MOOC清华《程序设计基础》第5章:快速排序(不分配动态空间-算法一)
- MOOC清华《程序设计基础》第5章:快速排序(不分配动态空间-算法二)
- MOOC清华《程序设计基础》第5章:快速排序(不分配动态空间-算法三)
- MOOC清华《程序设计基础》第5章:归并排序
- MOOC清华《程序设计基础》第6章第3题:最大乘积问题(动态规划)
- MOOC清华《程序设计基础》第5章第4题:用递归算法实现选择排序
- MOOC清华《程序设计基础》第6章:橱窗插花问题(动态规划,输出方法一)
- MOOC清华《程序设计基础》第6章:橱窗插花问题(动态规划,输出方法二)
- MOOC清华《程序设计基础》第6章:最长公共子序列问题(动态规划)
- MOOC清华《程序设计基础》第4章:整理扑克牌(插入排序)
- MOOC清华《程序设计基础》第4章:整理扑克牌(插入排序精简版)
- MOOC清华《程序设计基础》第4章:整理扑克牌(选择排序)
- MOOC清华《程序设计基础》第4章:插入排序(函数写法)
- MOOC清华《程序设计基础》第4章:选择排序(函数写法)
- MOOC清华《程序设计基础》第4章:折半插入排序(测试代码版)
- MOOC清华《程序设计基础》第4章:折半插入排序(函数写法)
- MOOC清华《程序设计基础》第5章:青蛙过河问题
- 二叉搜索树与双向链表
- 云笔记项目 Unit07
- ubuntu初始配置
- Alice and Bob HDU
- Android代码方式操作应用程序安装、卸载、分享、启动
- MOOC清华《程序设计基础》第5章:快速排序(分配动态空间)
- Linux下安装Nginx服务器
- A document for my learning journey in Python
- 【java 之匿名内部类的总结】
- 64位WIN10下安装.net2.0
- fly.js 和 poshytip 插件的结合, 形成加入购物车的动画效果
- 百家号运营技巧:如何发布图集获得高收益呢?
- JSON与XML的综合比较
- 精通比特币