快速排序的一种简单实现

来源:互联网 发布:林俊杰瘦 知乎 编辑:程序博客网 时间:2024/05/10 13:33

      快速排序算法是分治思想和递归思想的综合运用。本文给出了它的一个简单实现,用以从代码理解快速排序。这个实现仅仅体现了快速排序的基本思想,还有很大的优化空间。通过改进枢纽元的选取方法,可以节省5%的运行时间;通过有效利用插入排序的优点,可以节省15%的运行时间。总的效率可以提高20%以上。具体优化参见《Data Structures and Algorithm Analysis in C》。有关如何选取排序算法,将在随后的文章中详细讨论。

 

#include <stdio.h>
#include <stdlib.h>


/*交换函数*/ 

void swap(int *a, int*b)
{
 int t = *a;
 *a = *b;
 *b = t;
}


/*快速排序主程序*/

void q_sort( int a[], int left, int right )

{
 if(left>=right){return;}

 int i=left, j=right;
 int pivot = a[right];
 while(true)
 {
   while((a[i]<=pivot)&&(i<j))i++;
   while((a[j]>=pivot)&&(i<j))j--;
   if(i<j)
   {
  swap(&a[i],&a[j]);
   }
   else
   {
  break;
   }
 }

 swap(&a[i], &a[right]);

 q_sort(a, left, i-1);
 q_sort(a, i+1, right);
}

 /*快速排序驱动程序*/

void quicksort( int a[], int n )
{
 q_sort(a, 0, n-1);
}

 /*测试程序*/

void main()
{
 int a[100];

 for(int i=0;i<100;i++)
 {
  a[i] = rand()%100;
 }

 printf("Before\r\n");
 for(i=0;i<100;i++)
 {
  printf("%d ",a[i]);
 }

 quicksort(a,100);

 printf("\r\nAfter\r\n");
 for(i=0;i<100;i++)
 {
  printf("%d ",a[i]);
 }
}

原创粉丝点击