快速排序,性能不错,但是稳定性比较差的一种排序,小弟的表达比较差,具体的算法请自行wiki,我这边贴出自己的实现:
#include <stdio.h>
void quick_sort(int num[], int start, int end) {
int pos, mov;
int tmp, middle;
if (start < end) {
middle = start;
for (pos = start + 1; pos <= end; pos++) {
if (num[pos] < num[middle]) {
tmp = num[pos];
for (mov = pos - 1; mov >= middle; mov--) {
num[mov + 1] = num[mov];
}
num[middle] = tmp;
middle++;
}
}
quick_sort(num, start, middle - 1);
quick_sort(num, middle + 1, end);
}
}
int main(void)
{
int cur;
int num[] = {4,1,2,7,3,9,6,5,8};
quick_sort(num, 0, 8);
for (cur = 0; cur <=8; cur++) {
printf("%d, ", num[cur]);
}
printf("\n");
return 0;
}
运行结果如下:
cheny.le@cheny-ThinkPad-T420:~$ gcc quick_sort.c
cheny.le@cheny-ThinkPad-T420:~$ ./a.out
1, 2, 3, 4, 5, 6, 7, 8, 9,
快速排序用递归来实现会比较简单,关键是middle的选定和数组元素的移动。