目录
- 关于快排的一些知识
- qsort函数调用
- 例题讲解
一、快排的一些知识
基本思想
1.选定pivot中心轴
2.将大于pivot的数字放在pivot的右边
3.将小于pivot的数字放在pivot的左边
4.分别对左右子序列重复前面的操作
算法实现:
#include二、qsort函数调用void quicksort(int a[], int start, int end) { int i = start, j = end; //定义两个指针指向数组的首位两个数 int pivot = a[start]; //让基准值为数组第一个值 int temp; //temp用于交换两个找到的值 if (start >= end) { return; } while (i < j) { while (i < j && pivot <= a[j]) //从右边开始寻找 j--; while (i = a[i]) i++; if (i < j) //交换两个数在数组的位置 { temp = a[i]; a[i] = a[j]; a[j] = temp; } } //跳出循环说明两个指针相遇了,此时交换两个指针指向的值与基准值 a[start] = a[i]; a[i] =pivot; quicksort(a, start, i - 1); //基准值左边的数组继续排序 quicksort(a, i + 1, end); //基准值右边的数组继续排序 } int main() { int i, n; int a[10]; scanf("%dn", &n); for (i = 0; i < n; i++) { scanf("%d", &a[i]); } quicksort(a, 0, n-1); for (i = 0; i < n; i++) { printf("%d ", a[i]); } return 0; }
c++可以调用sort函数对数组进行排序,在C语言中,也可以调用qsort函数;
函数原型
该函数调用时必须加头文件
void qsort(void *base, size_t nitems, size_t size, int (*compar)(const void *, const void*))
含义
其中:
compar(comp)的返回值小于0,那么p1所指向的值就会被排在p2前面;
如果等于0,那么排序顺序不确定;
如果大于0,p1所指向的值就会被排在p2后面;
所以comp一般用于确定函数的排序方式(升序或者降序)
思路:
- 先排序,再排好的数组中比较头和尾;
- 如果大于最大值,则尾端值为一组,尾端数组向前一个继续判断;
- 如果相加未超过最大值,则二者为一组,组数个加1,数组继续向前寻找
代码如下:
#include#include int comp(const void* a, const void* b) { return *(int* )a - *(int* )b; } int main() { int i; int n,m; int a[200001]; int count = 0; scanf("%dn%d" ,&m,&n); int r = 0, s = n-1; for (int i = 0; i < n; i++) { scanf("%d", &a[i]); } qsort(a, n, sizeof(int), cmp); while (r <= s) { if (a[r] + a[s] <= m) { r++; s--; count++; }else { s--; count++; } } printf("%d", count); return 0; }



