重温排序之快速排序(qsort)
来源:互联网 发布:十八岁出门远行 知乎 编辑:程序博客网 时间:2024/05/12 03:37
快速排序算法几乎涵盖了所有经典算法的所有榜单。它曾获选二十世纪最伟大的十大算法
最近温习算法,看到快排之处,不禁热血沸腾,惊叹于它的优雅,它的简洁,遂作如下实现,以作纪念
#include<stdio.h>
int a[10]={2,34,5,23,1,455,3,65,0,99};//待排序数组
int parition(int *a,int low,int high)//
{
int pivotkey=a[low];//枢纽元素。
while(low<high)
{
while(low<high&&a[high]>=pivotkey) high--;
a[low]=a[high];//此时high指针所指示的数组元素已经没有用
while(low<high&&a[low]<=pivotkey) low++;
a[high]=a[low];//此时hign成替代品
}//脱出循环的标志是low==hign,此时恰好存放pivotkey
a[low]=pivotkey;
return low;//返回已经排好序的数组的下标,表明这个元素已经排好位置
}//一趟排序的时间复杂度是o(n)
//对paition算法的点说明,这里选择待排序的第一个元素作为枢纽,排序的结果是,这个枢纽元素位于
//正确的排序位置上,而在这个位置的左边,任何一个值都小于等于这个枢纽元素,而且右边的元素都
//大于等于这个枢纽元素
void qsort(int *a,int low,int high)//递归的深度为lgn
{
if(low>=high) return;
int part=parition(a,low,high);
qsort(a,low,part-1);
qsort(a,part+1,high);
}
//qsort算法有一个明显的缺点当待排序数组已经是排好序的情况下,解决排序问题当产生o(n^2)的时间复杂度
void main()//整个算法的时间复杂度为n*lgn
{
qsort(a,0,9);
for(i=0;i<10;i++)
{
printf("%d ",a[i]);
}
puts("");
}
特别是pairition方法,简直神来之笔!
- 重温排序之快速排序(qsort)
- 快速排序(qsort)
- 重温排序法之--快速排序法
- 快速排序算法(qsort)
- qsort(快速排序)用法
- 快速排序算法(Qsort)
- 快速排序 qsort()函数
- 重温快速排序
- 16.8 快速排序之qsort()函数
- 快速排序qsort用法
- 快速排序 qsort
- 快速排序法qsort
- qsort快速排序
- qsort 快速排序
- 关于快速排序qsort
- qsort 快速排序法
- qsort 快速排序
- 快速排序qsort
- Annotation研究的一些学习资料
- 自定义 UITableViewCell 的 accessory 样式
- pb删除指定文件夹下所有文件
- java
- oracle 查看表所占用空间的大小
- 重温排序之快速排序(qsort)
- 实战tiny6410上的QT开发环境搭建与示例程序
- 关于智能手机使用的数据分析
- C#通过文件路径获取文件名
- ClassCastException 错误解析
- jsp容易混淆的几个地方
- 直接通过ODBC读写Excel表格文件
- 解决eclipse上传文件不自动刷新
- GridControl导出到excel