快速排序
2016-08-04 16:53
274 查看
void quickSort (int a[] , int low , int high) { if (high < low + 2) { return; } int start = low; int end = high; int temp; while (start < end) { // 找到第一个比a[low]数值大的位子start while ( ++start < high && a[start] <= a[low]); // 找到第一个比a[low]数值小的位子end while ( --end > low && a[end] >= a[low]); // 进行到此,a[end] < a[low] < a[start],但是物理位置上还是low < start < end,因此接下来交换a[start]和a[end],于是[low,start]这个区间里面全部比a[low]小的,[end,hight]这个区间里面全部都是比a[low]大的 if (start < end) { temp = a[start]; a[start]=a[end]; a[end]=temp; } // 在GCC编译器下,该写法无法达到交换的目的,a[start] ^= a[end] ^= a[start] ^= a[end];编译器的问题 } // 进行到此,[low,end]区间里面的数都比a[low]小的,[end,higt]区间里面都是比a[low]大的,把a[low]放到中间即可 // 在GCC编译器下,该写法无法达到交换的目的,a[low] ^= a[end] ^= a[low] ^= a[end];编译器的问题 temp = a[low]; a[low]=a[end]; a[end]=temp; // 现在就分成了3段了,由最初的a[low]枢纽分开的 quickSort(a, low, end); quickSort(a, start, high); }
相关文章推荐
- Linux下自动检测USB热插拔
- 二叉树前、中、后序遍历【非递归】【LintCode测试平台】
- HDU 2094 产生冠军
- CUDA编程_DEBUG_01
- java nio
- [转]libevent简介和使用
- 六度分离
- 浅谈微信卡券功能开发(1)
- 规律题_1
- 关于Glide显示默认图片的问题(circleImageView配合问题)
- 让Apache的commons-net-3.3中的FTPClient支持中文
- OpenStack Glance 之paste
- Unsupervised template learning for fine-grained object recognition
- 利用Memcached+Apache Tomcat+Nginx实现负载均衡
- centos 同步外网源到本地
- sqlite 增加字段语句
- Linux Shell编程之常用技巧
- wordpress 模板页面加载速度慢问题剖析
- 冒泡排序
- XMLHttpRequest2级