快速排序

思想:分治法

分治法基本思想:将原问题分为若干个规模更小但结构与原结构相似的子问题,递归地解这些子问题,然后将这些子问题的解组合为原问题的解。

代码:

 1 #include<stdio.h>

  2 void quick_sort(int a[],int low,int high)

  3 {

  4     int i,j,pivot;

  5     if(low < high)

  6     {

  7         pivot = a[low];

  8         i = low;

  9         j = high;

 10         while(i<j)

 11         {

 12             while(i<j && a[j]>=pivot)

 13                 j--;

 14             if(i<j)

 15                 a[i++] = a[j];//将比privot移到低端

 16             while(i<j && a[i]<=pivot)

 17                 i++;

 18             if(i<j)

 19                 a[j--] = a[i];//将比privot移到高端

 20         }

 21         a[i] = pivot; //pivot移到最终位置

 22         quick_sort(a,low,i-1);//对左区间递归排序

 23         quick_sort(a,i+1,high);

24     }

 25 }

 26 void print_array(int a[],int n)

 27 {

 28     int i;

 29     for(i=0;i<n;i++)

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

 31     printf("\n");

 32 }

 33

 34 void main()

 35 {

 36     int a[]={1,9,5,3};

 37     printf("before quick_sort:\n");

 38     print_array(a,4);

 39     quick_sort(a,0,3);

 40     printf("after quick_sort:\n");

 41     print_array(a,4);

 42 }

说明:这里pivot代表基准值,它的初始值为a[low]。局部变量ij分别代表lowhigh的位置,接着按照下面的步骤进行一趟交换:

(1)把比pivot小的元素移动到低端(low

(2)把比pivot大的元素移动到高端(high

(3)pivot移动到最终位置,此时pivot左边的值都比它小,右边的值都比它大;

4)对左右区间分别进行递归排序,把前三步细化,直至最终lowhigh交汇。


在平均情况下,时间复杂度为O(nlog2n);空间复杂度为O(log2n).


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值