快速排序---C语言实现
来源:互联网 发布:上海大学乐乎论坛 编辑:程序博客网 时间:2024/05/17 02:53
快速排序是这样的一种排序算法,每次将关键字放在合适的位置上,关键字之前的都比它小,之后的都比它大,接下来用两种方式实现快速排序的算法,递归和非递归。先看下递归版本的
int partation(ELEM_TYPE *arr,int left,int right)
{
ELEM_TYPE tmp=arr[left];
while(left<right)
{
while(left<right && tmp<=arr[right])
{
right--;
}
arr[left]=arr[right];
//right--;
while(left<right && tmp>=arr[left])
{
left++;
}
arr[right]=arr[left];
}
arr[left]=tmp;
return left;
}
//快速排序
void quick_sort(ELEM_TYPE *arr,int left,int right)
{
if(left<right)
{
int pos=partation(arr,left,right);
quick_sort(arr,left,pos-1);
quick_sort(arr,pos+1,right);
}
}
//非递归版本,借助栈来实现,
void quick_sort(ELEM_TYPE *arr,int left,int right,d_stack *p)
{
int mid;
int s1;
int s2;
if(left<right)
{
mid = partation(arr,left,right);
}
if(left < (mid - 1)) //左半边入栈
{
push(p,left);
push(p,mid-1);
}
if((mid+1) < right) //右半边入栈
{
push(p,mid+1);
push(p,right);
}
while(!isempty(p)) //循环直到栈为空,说明已排好序
{
pop(p,&s2);
pop(p,&s1);
mid=partation(arr,s1,s2);
if(s1<(mid-1))
{
push(p,s1);
push(p,mid-1);
}
if(mid+1<s2)
{
push(p,mid+1);
push(p,s2);
}
}
}
复杂度分析:
由以上程序可以看出,每次都是一半一半地进行,故时间复杂度为log2N,相对基本排序较快。快速排序算法适合大量无需的数据的排序。如果数据有序,会进行多次额外的交换。
- 快速排序 C语言实现
- 快速排序C语言实现
- c语言实现快速排序
- C语言实现快速排序
- 快速排序实现(C语言)
- 快速排序C语言实现
- C语言实现快速排序
- 快速排序C语言实现
- 快速排序C语言实现
- C语言实现快速排序
- C语言实现快速排序
- 快速排序c语言实现
- 快速排序c语言实现
- C语言实现快速排序
- 快速排序(C语言实现)
- 快速排序C语言实现
- C语言实现快速排序
- c语言实现快速排序
- JDK7.0安装与配置
- hdu1217 Arbitrage (floyd)
- 中文分词之HMM模型详解
- ssm maven配置
- 论__大量文本内容去重的方式
- 快速排序---C语言实现
- C语言可变参函数的实现原理浅析
- 根据遍历结果构造二叉树
- Cocos2d-x常用动作 Action API
- 简单方法实现重力感应背景图(GravityImageView)
- js事件
- C语言实现循环队列
- linux开机自启动的几种方法
- 程序员技术练级攻略