数据结构排序之快速排序
2014-10-24 00:35
211 查看
本来昨天晚上就可以把快速排序发上去,没想到昨晚CSDN竟然维护,那么就只能在停电的情况下下用学校的卡的要死的网发这快速排序了,不停多好,停电了还得自己掏腰包买个充电台灯,装的好像像学霸一样,实际就是一个大学渣,我也就不JJYY,直接说快速排序的思想,我是这样理解的,用一个变量作为基准,在拿出i和j两个变量,分别从数组的两端开始,将比它大的放在后面,小的放在前面,后续用递归的思想完成,这个效率还是很赞的,平均时间的复杂度为o(nlogn),对于常规的排序算法我看了书上的总结,和大家分享一下
(1)当记录的规模小,直接插入排序较好,当直接选择移动的记录数少于直接插入时,应该选择直接选择排序
(2)看起来貌似记录初始状态有序,则应选用直接插入或者冒泡排序
(3)若记录比较大,大概扫一眼比较乱,果断上快速排序,没得商量,因为平均时间的复杂度为o(nlogn),时间最少
直接上代码吧
(1)当记录的规模小,直接插入排序较好,当直接选择移动的记录数少于直接插入时,应该选择直接选择排序
(2)看起来貌似记录初始状态有序,则应选用直接插入或者冒泡排序
(3)若记录比较大,大概扫一眼比较乱,果断上快速排序,没得商量,因为平均时间的复杂度为o(nlogn),时间最少
直接上代码吧
#include<stdio.h> #include<time.h> #include<stdlib.h> void quicksort(int a[],int n) // 实现排序的函数 { int i=0,j=n-1,k=a[i]; if(n-1>0) // 递归的终止条件 { while(i<j) //每一趟排序的终止条件 { while(i<j&&a[j]>k) //从左找第一个小于k的数 j--; if(i<j) a[i++]=a[j]; while(i<j&&a[i]<k) //从右找第一个大于k的数 i++; if(i<j) a[j--]=a[i]; } a[i]=k; // 找到合适 的索引i存放K值 quicksort(a,i-1); // 左子序排序 quicksort(a+i+1,n-i-1); //右子序排序 } } int main() // 主函数 { int array[100]; int i=0,n; srand ( (unsigned)time (NULL) ); printf("请你输入要排序的个数: "); scanf("%d",&n); printf("随机产生%d个数: ",n); for(i=0;i<n;i++) { array[i]=rand()%10+10; //产生10~20之间的数 printf("%d ",array[i]); } quicksort(array,n); // 实现排序的函数 printf("\n排序之后为:",n); for(i=0;i<n;i++) { printf("%d ",array[i]); } printf("\n"); return 0; }
相关文章推荐
- 浅谈算法和数据结构: 四 快速排序
- 数据结构一一快速排序
- 数据结构与算法:C++实现快速排序
- 重学数据结构——快速排序,二分法查找
- 《常见算法和数据结构》元素排序(6)——重头戏:快速排序
- C++数据结构--快速排序
- 【算法与数据结构必备】PHP常用排序算法:冒泡,快速排序,插入排序(一维数组)
- 数据结构-链表快速排序
- 数据结构:快速排序
- 数据结构与算法之---快速排序
- 浅谈数据结构-交换排序(冒泡、快速)
- 数据结构- 快速排序
- 数据结构---------快速排序
- 黑马程序员之数据结构学习笔记:快速排序
- 数据结构排序-快速排序
- 数据结构(4)快速排序
- 10-7-快速排序-内部排序-第10章-《数据结构》课本源码-严蔚敏吴伟民版
- C++代码,数据结构-内部排序-交换排序-快速排序
- 数据结构&算法学习笔记: 快速排序
- 【东东学数据结构】快速排序