计算机算法之快速排序、原址排序、递归的最好应用

快速排序是实际应用中常常会用到的一种排序算法:因为它的平均性能非常好:速度也非常快,能够进行原址排序、甚至在虚存环境下也能很好地工作。下面给出一个快速排序在C语言下的实例:

#include "stdio.h"
#include "conio.h"
#define N  24
/*
快速排序算法:时间复杂度是nlg(n),以2为底,不是10!
是实际排序应用中最好的选择,因为它的平均性能非常好
它能够进行原址排序,甚至在虚存环境下也能很好地工作!
注意待排序数组的0号元素并不能用于排序,有特殊作用!
*/
void quickly_sort(int A[],int p,int r)
{
   int q=0;
   if(p<r){
        q=partition(A,p,r);
        quickly_sort(A,p,q-1);
        quickly_sort(A,q+1,r);
   }
}
/*快速排序算法关键的函数如下:它主要实现确定一个数:
这个数的左边的数永远不大于它,而在它右边的数永远不
小于它。 下面的p和r分别表示数组A的下标,p和r构成了
一个区间,在这个区间选择出一个符合要求的数*/
int partition(int A[],int p,int r)
{
    int mid=A[r];  /*假设这个数就是中间数*/
    int i=p-1;
    int j=0,temp=1;
    for(j=p;j<r;j++)
    {
       if(A[j]<mid)
       {
          i=i+1;
          temp=A[j];
          A[j]=A[i];
          A[i]=temp;
       }
    }i++;
    temp=A[r];
    A[r]=A[i];
    A[i]=temp;
    return i;
}
main()
{
    int a[N]={0,2,5,4,3,0,2,8,1,6,7,54,67,4,34,32,12,14,38,21,24,25,78,20},i; /*0号元素没有参加排序,但必须有*/
    quickly_sort(a,1,N-1);
    printf("利用快速算法排序好的数组如下\n");
    for(i=1;i<N;i++) /*0号元素是自行添加,不需要输出*/
        printf(" %d ",a[i]);
    getch();
}


你可能感兴趣的:(算法,递归,快速排序,C语言,排序算法)