#include <stdio.h> #include <malloc.h> //快速排序 平均时间复杂度O(NlogN) 最差时间复杂度为O(N^2) //从小到大排序 void quickSort(int *a, int len){ int temp; //数组头尾的两个下标 int head=0, tail=len-1; if (head > tail) return; //随机取的一个数,不过为了避免越界,a[0]最保障 int flagNum = a[0]; while (head < tail){ //从尾到头比较,直到有数小于flagNum,或者头尾重叠 while (a[tail] >= flagNum && tail>head){ tail--; } //从头到尾比较,直到有数大于flagNum,或者头尾重叠 while (a[head] <= flagNum && tail>head){ head++; } //head没和tail重叠时,交换两数位置 if (head < tail){ temp = a[head]; a[head] = a[tail]; a[tail] = temp; } } //当head和tail重叠(因为已经跳出循环了),交换flagNum和当前坐标 temp = a[0]; a[0] = a[tail]; a[tail] = temp; //head把数组分成2份,这里用递归(head可以换成tail,毕竟重叠了) quickSort(a, head); quickSort(a + head + 1, len - head - 1); return; } void main() { int *a; int numCount; int i; printf("input numCount\n"); scanf("%d", &numCount); a = (int *)malloc(sizeof(int) * numCount); printf("Now you input\n"); for (i = 0; i < numCount; ++i) { scanf("%d", &a[i]); } printf("sort before:"); for (i = 0; i < numCount; ++i) { printf("%d ",a[i]); } //快速排序算法开始 quickSort(a, numCount); printf("\nsort after:"); for (i = 0; i < numCount; ++i) { printf("%d ",a[i]); } }
排序算法_2,快速排序
最新推荐文章于 2019-12-05 19:45:11 发布