递归实现快速排序

Posted 随心佩

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了递归实现快速排序相关的知识,希望对你有一定的参考价值。

 #include <stdio.h>
#include <stdlib.h>
#include <time.h>
int r[20001];
void main()
{ int i,n,t;
  void qk(int m1,int m2);   // 函数声明  
  t=time(0)%1000;srand(t);          //  随机数发生器初始化  
  printf("  input n:");
  scanf("%d",&n);
  printf("  参与排序的%d个整数为:\n",n);
  for(i=1;i<=n;i++)
    {r[i]=rand()%(4*n)+10;          // 随机产生并输出n个整数  
     printf("%d ",r[i]);
     }
  qk(1,n);
  printf("  \n  以上%d个整数从小到大排序为:\n",n);
  for(i=1;i<=n;i++)
    printf("%d ",r[i]);            // 输出排序结果  
  printf("\n");
}
void qk(int m1,int m2)             // 快速排序递归函数  
{ int i,j;
  if(m1<m2)
   { i=m1;j=m2;r[0]=r[i];          // 定义第i个数作为分区基准  
     while(i!=j)
      { while(r[j]>=r[0] && j>i)   // 从右至左逐个检查是否大于基准  
          j=j-1;
        if(i<j) {r[i]=r[j];i=i+1;} // 把小于基准的一个数赋给r(i)  
        while(r[i]<=r[0] && j>i)   // 从左至右逐个检查是否小于基准  
              i=i+1;
        if(i<j) {r[j]=r[i];j=j-1;} // 把大于基准的一个数赋给r(j)  
      }                            // 通过循环完成分区  
    r[i]=r[0];                     // 分区的基准为r(i)  
    qk(m1,i-1); qk(i+1,m2);        // 在两个区中继续分区  
   }
 return;
}

 

以上是关于递归实现快速排序的主要内容,如果未能解决你的问题,请参考以下文章

六千字快速复习七种常用排序

六千字快速复习七种常用排序

八大排序 (万字总结)(详细解析,建议收藏!!!)

2021-10-21java:六千字快速复习七种常用排序

java 使用一些基准测试代码实现Naive递归快速排序。请注意,此实现仅用于演示。它会失败

C语言快速排序代码