库函数:
#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的位置进行互换~~
}
自己实现的快速排序:
快速排序的思想:先找到一个元素的位置,然后排该元素之前和之后的部分,用相同的方法(应用到递归)
- #include <stdio.h>
- void qsort(int *pa, int low, int high);
- int findPos(int *pa, int low, int high);
- int main(void)
- {
- int i;
- int data[] = {90, 22, 2, 4, -34, 5};
- int n = sizeof(data) / sizeof(int);
- qsort(data, 0, n-1);
- for (i = 0; i < n; i++)
- printf("%4d", data[i]);
- printf("\n");
- return 0;
- }
- void qsort(int *pa, int low, int high)
- {
- int pos;
- if (low < high)
- {
- pos = findPos(pa, low, high);
- qsort(pa, low, pos-1);
- qsort(pa, pos+1, high);
- }
- }
- int findPos(int *data, int low, int high)
- {
- int val = data[low];
- while (low < high)
- {
- while (low<high && val<=data[high])
- high--;
- data[low] = data[high];
- while (low<high && val>=data[low])
- low++;
- data[high] = data[low];
-
- }
- data[low] = val;
- return high;
- }
阅读(1589) | 评论(0) | 转发(0) |