蓝桥杯算法之快速排序
2018-03-31 17:10
120 查看
快速排序:
快速排序是由冒泡排序改进来的,基本思想是在待排序的N个元素中任取一个元素(通常去第一个)作为基准,把该元素放入适当位置后,数据序列被此元素划分为两部分,所有关键字比该元素小的放到前一部分,所有关键字比该元素大的元素放到后一部分,并把该元素放到两部分中间(将该元素重新放回队列,归位),这称为一趟快排序。之后对两部分重复上述过程,直到每部分内只有一个元素或者为空为止。void quick(int *a,int l,int r)
{
if(l>=r)
return ;
int temp=a[l];///哨兵
int i=l,j=r;
while(i<j)
{
while(i<j)///从右边找到第一个小于哨兵的数a[j],放到a[i]处
{
if(a[j]>=temp)
j--;
else{
a[i++]=a[j];
break;
}
}
while(i<j)///从左向右找到第一个大于哨兵的数a[i],放到a[j]处
{
if(a[i]<=temp)
i++;
else{
a[j--]=a[i];
break;
}
}
}
a[i]=temp;///将哨兵放回队列中
quick(a,l,i-1);///向左边继续排序
quick(a,i+1,r);///向右边继续排序
}
快速排序是由冒泡排序改进来的,基本思想是在待排序的N个元素中任取一个元素(通常去第一个)作为基准,把该元素放入适当位置后,数据序列被此元素划分为两部分,所有关键字比该元素小的放到前一部分,所有关键字比该元素大的元素放到后一部分,并把该元素放到两部分中间(将该元素重新放回队列,归位),这称为一趟快排序。之后对两部分重复上述过程,直到每部分内只有一个元素或者为空为止。void quick(int *a,int l,int r)
{
if(l>=r)
return ;
int temp=a[l];///哨兵
int i=l,j=r;
while(i<j)
{
while(i<j)///从右边找到第一个小于哨兵的数a[j],放到a[i]处
{
if(a[j]>=temp)
j--;
else{
a[i++]=a[j];
break;
}
}
while(i<j)///从左向右找到第一个大于哨兵的数a[i],放到a[j]处
{
if(a[i]<=temp)
i++;
else{
a[j--]=a[i];
break;
}
}
}
a[i]=temp;///将哨兵放回队列中
quick(a,l,i-1);///向左边继续排序
quick(a,i+1,r);///向右边继续排序
}
相关文章推荐
- 数据结构与算法之一快速排序
- 蓝桥杯 - 算法训练 删除多余括号 C语言实现
- 算法 2.3节 有重复数据和没有的快速排序
- 蓝桥杯 ADV-79 算法提高 时间转换
- 蓝桥杯 ADV-95 算法提高 字符串比较
- 蓝桥杯——算法训练 分解质因数
- 蓝桥杯 - 算法训练 邮票 C语言实现
- 蓝桥杯 算法训练 连续的正整数和
- 蓝桥杯ALGO-104——算法训练 阿尔法乘积
- (算法)DFS深度优先搜索—2016年蓝桥杯省赛java剪邮票
- 蓝桥杯 ALGO-84 算法训练 大小写转换
- 蓝桥杯算法训练 表达式计算(优化版)
- 蓝桥杯 算法训练 出现次数最多的整数
- 蓝桥杯 ALGO-139 算法训练 s01串
- 蓝桥杯算法训练最短路(spfa)
- 排序算法之快速排序的理解与实现
- 快速排序(quicksort)算法实现
- 蓝桥杯 ALGO-99 算法训练 薪水计算
- 蓝桥杯 算法训练(2)
- 算法-蓝桥杯习题(5-1)