快速排序
2016-03-09 11:40
183 查看
快速排序
1.先从数列中取出一个数作为基准数。
2.分区过程,将比这个数大的数全放到它的右边,小于或等于它的数全放到它的左边。
3.再对左右区间重复第二步,直到各区间只有一个数。
//快速排序
void quick_sort(int s[], int l, int r)
{
if (l < r)
{
//Swap(s[l], s[(l + r) / 2]); //将中间的这个数和第一个数交换 参见注1
int i = l, j = r, x = s[l];
while (i < j)
{
while(i < j && s[j] >= x) // 从右向左找第一个小于x的数
j--;
if(i < j)
s[i++] = s[j];
while(i < j && s[i] < x) // 从左向右找第一个大于等于x的数
i++;
if(i < j)
s[j--] = s[i];
}
s[i] = x;
quick_sort(s, l, i - 1); // 递归调用
quick_sort(s, i + 1, r);
}
}
1.先从数列中取出一个数作为基准数。
2.分区过程,将比这个数大的数全放到它的右边,小于或等于它的数全放到它的左边。
3.再对左右区间重复第二步,直到各区间只有一个数。
//快速排序
void quick_sort(int s[], int l, int r)
{
if (l < r)
{
//Swap(s[l], s[(l + r) / 2]); //将中间的这个数和第一个数交换 参见注1
int i = l, j = r, x = s[l];
while (i < j)
{
while(i < j && s[j] >= x) // 从右向左找第一个小于x的数
j--;
if(i < j)
s[i++] = s[j];
while(i < j && s[i] < x) // 从左向右找第一个大于等于x的数
i++;
if(i < j)
s[j--] = s[i];
}
s[i] = x;
quick_sort(s, l, i - 1); // 递归调用
quick_sort(s, i + 1, r);
}
}
相关文章推荐
- 如何在eclipse配置PyDev
- pat1040:有几个PAT
- C++设计模式编程中proxy代理模式的使用实例
- nginx学习(2) - 静态资源分离
- 线性时间排序C++代码集合(计数排序,基数排序,桶排序([0~1)的浮点数))
- MVC思想
- 【SSH进阶之路】Hibernate基本映射(三)
- selenium-webdriver 关于测试新打开页面报错解决办法
- Autofac和nopcommerce中的Autofac, 还有反射
- 设计模式:建造者模式
- Swift中可选项、闭包、便利构造函数的相关问题
- 学习进度条
- UIview subview等等的view相关
- iOS 引导用户到系统设置开启定位 访问照片 话筒 相册 相机
- jquery jqGrid翻页记录原来数据并勾选已选择的数据
- sizeof const volatile
- 【SSH (二)】struts2处理.do请求
- 如何避免Handler引起内存泄露
- linux命令行参数解析学习心得
- 通用JDBC-demo