Chinaunix首页 | 论坛 | 博客
  • 博客访问: 129591
  • 博文数量: 44
  • 博客积分: 956
  • 博客等级: 准尉
  • 技术积分: 521
  • 用 户 组: 普通用户
  • 注册时间: 2011-04-18 12:45
文章分类
文章存档

2012年(11)

2011年(33)

分类: C/C++

2011-12-06 18:26:19

库函数:
#include
void qsort(void *base, size_t nmemb, size_t size, int(*compar)(const void *, const void *));
 
参数说明:
void *base:   需要排序的数组地址;
size_t nmemb:  需要排序的元素的个数
size_t size:   需要排序元素的长度(单个元素)
int (*compar)(const void *, const void *):指定比较规则函数的指针,在指定的函数中,需要实现排序的规则;
eg:在对int数组排序从小到大,可以:
 
int comp(const void *p1, const void *p2)
{
     return (*(int *)p1 - *(int *)p2);
    //如果要从大到小排序,只需要将p1和p2的位置进行互换~~
}
 
自己实现的快速排序:
     快速排序的思想:先找到一个元素的位置,然后排该元素之前和之后的部分,用相同的方法(应用到递归)
  1. #include <stdio.h>

  2. void qsort(int *pa, int low, int high);
  3. int findPos(int *pa, int low, int high);

  4. int main(void)
  5. {
  6.     int i;
  7.     int data[] = {90, 22, 2, 4, -34, 5};

  8.     int n = sizeof(data) / sizeof(int);

  9.     qsort(data, 0, n-1);

  10.     for (i = 0; i < n; i++)
  11.         printf("%4d", data[i]);
  12.     printf("\n");

  13.     return 0;
  14. }


  15. void qsort(int *pa, int low, int high)
  16. {
  17.     int pos;
  18.     if (low < high)
  19.     {
  20.         pos = findPos(pa, low, high);
  21.         qsort(pa, low, pos-1);
  22.         qsort(pa, pos+1, high);
  23.     }
  24. }

  25. int findPos(int *data, int low, int high)
  26. {
  27.     int val = data[low];

  28.     while (low < high)
  29.     {
  30.         while (low<high && val<=data[high])
  31.             high--;
  32.         data[low] = data[high];

  33.         while (low<high && val>=data[low])
  34.             low++;
  35.         data[high] = data[low];
  36.     
  37.     }

  38.     data[low] = val;

  39.     return high;
  40. }
阅读(1556) | 评论(0) | 转发(0) |
0

上一篇:第六天~

下一篇:Linux操作基础(1)

给主人留下些什么吧!~~