交换类排序之快速排序
2016-03-25 21:35
204 查看
#include<stdio.h> void QuickSort(int R[],int l,int r) //快排 { int i=l,j=r; int temp; if(l<r) { temp=R[l]; //以temp为关键字,也就是最左边的那个数 while(i!=j) //直到i=j为止结束 { //数组中小于temp的元素放在左边,大于temp的元素放右边 while(j>i&&temp<R[j]) --j;//从右往左扫描找到一个小于temp的元素 if(i<j) { R[i]=R[j]; ++i; //i指针右移一位 } while(j>i&&temp>R[i]) ++i; //从左往右扫描找到一个大于temp的元素 if(i<j) { R[j]=R[i]; --j; //j指针左移一位 } } R[i]=temp; //将temp放在最终位置 QuickSort(R,l,i-1); //递归地将temp左边的元素进行排序 QuickSort(R,i+1,r); //递归地将temp右边的元素进行排序 }
} int main() { int R[5]={2,8,1,6,3}; int i; QuickSort(R,0,4); for(i=0;i<5;i++) printf("%d ",R[i]); printf("\n"); return 0; }
(1)时间复杂度分析:快排最好情况下的时间复杂度是O(nlogn),待排序列越接近无序,本算法效率越高。最坏情况下的时间复杂度为O(n^2),待排序列越接近有序,算法的效率越低。平均时间复杂度为O(nlogn)。就平均时间而言,快速排序是所有排序算法中最好的。
(2)空间复杂度分析:O(logn)快排是递归进行的,需要栈的辅助,因此他需要的辅助空间比其他的几类排序算法多。
相关文章推荐
- Java_SE01-API和字符串操作
- CSS 垂直居中
- git使用入门
- 使用KVC的一个注意点
- MySQL具体解释(7)-----------MySQL线程池总结(一)
- 初探招聘会
- Android课程---课下练习(表格、线性和相对布局)
- 代码总结
- android之常用知识点(一)
- U-Boot的编译过程分析
- 学习 Object-C: 简史
- dwExStyle和dwStyle的说明(Delphi SDK窗口)
- ubuntu14.04 下安装有道词典
- WPF学习——依赖项属性(1)
- mybatis的学习
- 括号匹配问题
- POJ1679
- sin的泰勒展开
- IOS开发-OC学习-MD5加密
- poj 1962(并查集+带权更新)