c语言实现快速排序算法,基于c语言实现的快速排序算法

题目描述:对输入的n个数进行排序并输出。

解题思路:其实是很常规的排序题,但是为了一复习,所以采用快排的方法。这里就当是快速排序的代码实现练习好了。

快速排序是非常经典的一个算法,可以在对数规模的时间下实现对一组数的排序。

其基于分治的思想,每一趟排序把原组数划分为更小的范围进行排序,并且一定有一个数会在每趟排序下放在最终的位置。

用通俗的语言描述这个过程,就是从这一个分组的两头开始向中间遍历,一边遍历一边把大的放到右边,小的放到左边。

最后当low=high时停留在pivot的位置,再将一开始枢纽pivot的元素塞回去。

枢纽元素pivot最后所在的位置为其最终位置,最后以枢纽元素为中心把大分组的元素划分为两部分

递归调用快排函数,对于更小的部分继续排序、划分、再对更小的分组进行快排,再划分……

注:pivot的选取是任意的,这里为了方便每次选取最左元素作为枢纽。实际上每次如果选取的枢纽在一趟排序后恰能把这一组数据从中间划分为两部分最佳。

(一趟排序后pivot左边的元素不一定有序,但比pivot元素小(<=);pivot右边的元素也同理,不一定有序,但比pivot元素大。(>=))

对于快排算法我一开始学习也是比较大头,时间久了就很熟悉了。想起大三上算法课的时候居然还和老师说快排是基于二分的思想。。。真是丢死人了

上学期复习排序的时候特意画了一张模拟的小漫画,现在不在身边。等下学期回学校再拍一下传上来放这里。

#include

void quick_sort(int *a,int l,int h)

{

if(l

{

int pivot=a[l];

int low=l;

int high=h;

while(low

{

while(low=pivot)

{

high--;

}

a[low]=a[high];

while(low

{

low++;

}

a[high]=a[low];

}

a[low]=pivot;

quick_sort(a,l,low-1);

quick_sort(a,low+1,h);

}

else return ;

}

int main()

{

int a[10001];

int n,i;

while(scanf("%d",&n)!=EOF)

{

int len=n;

i=0;

while(n--)

{

scanf("%d",&a[i]);

i++;

}

quick_sort(a,0,len-1);

for(i=0;i

{

printf("%d ",a[i]);

}

}

return 0;

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值