首页 > 代码库 > 快速排序
快速排序
我用自己的语言来阐述快速排序.希望没有基础的人也能看懂.
快速排序的主要是思想是:
1.找个参考数,把比它大的数放到右边,比它小的数放到左边;
2.递归
关于找参考数,没有比较死的规定,一般取第一个,也可以取其它的,比如中间的数.
代码如下,注释比较详细.
代码:
#include<stdio.h>#include<stdlib.h>void q_sort(int a[], int startIndex, int endIndex);int main(int argc, char **argv){ int i; int a[] = {3,1,4,7,11,2}; printf("排序之前:\n"); for(i = 0; i < 6; ++i) { printf("%d ", a[i]); } printf("\n"); q_sort(a, 0, 5); printf("排序之后:\n"); for(i = 0; i < 6; ++i) { printf("%d ", a[i]); } printf("\n"); exit(0);}void q_sort(int a[], int startIndex, int endIndex){ int midOne = a[startIndex];//选第一个作为参考点 int i = startIndex, j = endIndex; if(i < j)//这个判断是递归结束的依据,不加的话会导致堆栈溢出 { while(i < j) { for(; i < j; j--) if(a[j] < midOne)//小于参考点的数移到左边 { a[i++] = a[j]; break; } for(; i < j; i++) if(a[i] > midOne)//大于参考点的数移到右边 { a[j--] = a[i]; break; } } a[i] = midOne;//参考点归位 //把参考点左右的部分分别进行快排 q_sort(a, startIndex, i - 1); q_sort(a, i + 1, endIndex); }}
输出结果:
排序之前:3 1 4 7 11 2 排序之后:1 2 3 4 7 11
快速排序的时间复杂度:平均O(n*log(n)),最坏O(n^2);
快速排序的空间复杂度:平均O(logn),最坏O(n)
快速排序
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。