Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1678415
  • 博文数量: 585
  • 博客积分: 14610
  • 博客等级: 上将
  • 技术积分: 7402
  • 用 户 组: 普通用户
  • 注册时间: 2008-05-15 10:52
文章存档

2013年(5)

2012年(214)

2011年(56)

2010年(66)

2009年(44)

2008年(200)

分类: C/C++

2011-08-23 10:20:24

所有的排序算法中,快速排序一定要会写,因为这个最实用。完全可以用在工程实践之中。

下面的实现没有采用随机化的策略,每次partition,都把最右边的元素作为主元或者衡量的坐标,
把比主元小的放在左边,比主元大的放在右边,主元的位置作为interval返回。



  1. #include<stdio.h>
  2. #include<time.h>
  3. #include<stdlib.h>

  4. void swap(int *a ,int *b)
  5. {
  6.     int t = *a;
  7.     *a = *b;
  8.     *b = t;
  9. }


  10. int partition(int array[],int l,int r)
  11. {
  12.     int pivot = array[r];
  13.     int curpos = l;
  14.     int j ;

  15.     for( j = l;j<r;j++)
  16.     {
  17.         if(array[j] < pivot)
  18.         {
  19.             swap(&array[j],&array[curpos]);
  20.             curpos++;
  21.         }
  22.     }

  23.     swap(&array[r],&array[curpos]);
  24.     return curpos;
  25.     
  26.     
  27. }

  28. void quicksort(int array[],int l,int r)
  29. {
  30.     int interval;
  31.     if(l < r)
  32.     {
  33.         interval = partition(array,l,r);
  34.         quicksort(array,l,interval-1);
  35.         quicksort(array,interval+1,r);
  36.     }
  37.         
  38. }


  39. int test_quicksort()
  40. {
  41.     int number = 12;
  42.     int *array = malloc(number*sizeof(int));
  43.     if(array == NULL)
  44.     {
  45.         printf("malloc failed\n");
  46.         return -1;
  47.     }
  48.     int i;

  49.     printf("----------------------------------------before quick sort--------------\n");
  50.     srand(time(NULL));
  51.     for(i = 0;i<number;i++)
  52.     {
  53.         array[i] = rand()%1000;
  54.         printf("\tarray[%d] = %d\n",i,array[i]);
  55.     }

  56.     printf("----------------------------------------after quick sort-----------------\n");
  57.     
  58.     quicksort(array,0,number-1);
  59.     for(i = 0;i<number;i++)
  60.     {
  61.         printf("\tarray[%d] = %d\n",i,array[i]);
  62.     }
  63.     return 0;
  64. }
  65. int main()
  66. {
  67.     test_quicksort();
  68. }


阅读(578) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~