#include <stdio.h>
#include <stdlib.h>
/*
快速排序(quicksort)是分治法的典型例子,
它的主要思想是将一个待排序的数组以数组的某一个元素X为轴,
然后从左向右 和 X 比较 得到小于X的数,再接着从右向左 找到一个大于X的数,
两者交换,
使这个轴的左侧元素都比X大,而右侧元 素都比X小(从大到小排序)。
然后以这个X在变换后数组的位置i分为左右两个子数组,再分别进行快速排序,
直到子数组中只有一个元素为止。
*/
/*
a:数组
n:数组元素个数
*/
void quick_sort (int *a, int n) {
if (n < 2)
return;
//pivot,枢轴,选一个基点
int p = a[n / 2];
//left 开始左边的指针
int *l = a;
//right 开始右边的指针
int *r = a + n - 1;
while (l <= r) {
while (*l < p)
l++;
//左边找到比p大的数后,就从右边找比p小的数
while (*r > p)
r--;
//交换找到的左右两边的大数和小数
if (l <= r) {
int t = *l;
*l++ = *r;
*r-- = t;
}
}
//进行完第一轮快速排序后,递归X(p)左右两边分别排序
quick_sort(a, r - a + 1);
quick_sort(l, a + n - l);
}
int main () {
int a[] = {4, 65, 2, -31, 0, 99, 2, 83, 782, 1};
//取得数组长度
int n = sizeof a / sizeof a[0];
//快速排序
quick_sort(a, n);
for(int i=0;i<n;i++) {
printf("%d",a[i]);
printf("\n");
}
return 0;
}
C语言 之 快速排序
最新推荐文章于 2020-11-29 07:33:54 发布