数据结构之常见的排序算法2
来源:互联网 发布:hbase数据库设计例子 编辑:程序博客网 时间:2024/05/22 23:30
继续快速排序,简单选择排序和堆排序
一,快速排序
- 算法思想
b,分区过程,将比这个数大的放在右边,小于等于这个数的放到左边
c,再对左右区间重复第二步,直到各个区间只剩一个数
2,代码
void QuickSort(int[]s,int l,int r){//l,r是指快排的范围,从s[l]到s[r]int i=l;int j=r;int temp;if(l<r){temp=s[l];while(i!=j){while(j>i&&s[j]>temp){//从右向左找小于temp的数j--;}if(i<j){s[i]=s[j];i++;}while(i<j&&s[i]<temp){//从左向右找大于temp的数i++;}if(i<j){s[j]=s[i];j--;}}s[i]=temp;QuickSort(s, l, i-1);QuickSort(s, i+1, r);}}
二,简单选择排序
1,算法思想
选择类排序的主要动作是“选择”,简单选择排序采用最简单的选择方式,从头至尾顺序扫描排列,找出最小的一个记录,和第一个记录交换,
接着从剩下的记录中继续这种选择和交换,最终使序列有序。
void SelectSort(int r[],int n){int i,j,k;int temp;for(i=1;i<=n;i++){k=i;//算法关键处,从无需序列中挑出一个最小的元素for(j=i+1;j<=n;j++){if(r[k]>r[j]){k=j;}temp=r[i];r[i]=r[k];r[k]=temp;}}}
三,堆排序
warning:学堆排序之前,应该了解堆的相关知识;)
算法思想还是上杰宝吧...
代码如下咯:
/*调整为最小堆*/void Sift(int R[],int low,int high){int i=low,j=2*i;//R[j]是R[i]的左孩子节点int temp=R[i];while(j<=high){if(j<high&&R[j]<R[j+1]){j++;}if(temp<R[j]){R[i]=R[j];i=j;j=2*i;}else{break;}}R[i]=temp;}/*堆排序函数*/void heapSort(int R[],int n){int i;int temp;for(i=n/2;i>=1;--i){Sift(R,i,n);for(i=n;i>=2;--i){/*以下3句换出了根节点中元素将其放入最终位置*/temp=R[1];R[1]=R[i];R[i]=temp;Sift(R,1,i-1);//在减少了一个无需序列中进行调整}}}
0 0
- 数据结构之常见的排序算法2
- 数据结构之常见的排序算法1
- 数据结构之常见排序算法
- 数据结构-常见的排序算法
- 数据结构之常见排序算法汇总
- 数据结构和算法--常见的排序算法
- OC学习之道:数据结构中几种常见的排序算法:选择排序,插入排序.快速排序
- 【数据结构】常见的7种比较排序算法2
- java 数据结构 常见的排序算法
- 【数据结构】几种常见的排序算法
- 数据结构常见的八大排序算法
- 数据结构常见的八大排序算法
- Java数据结构与算法之常见排序算法总结
- 【数据结构】常见排序算法复杂度
- 数据结构常见的排序
- 常见算法之排序
- 【数据结构】常见的7种比较排序算法1
- 数据结构之排序算法
- 黑马程序员 正则表达式
- ios视图层次结构
- hust校赛d题 PHP is the best language int the world(二分图着色+递推)
- UITableView NSThread 实现动态加载图片
- UnicodeDecodeError: 'ascii' codec can't decode byte 0xe6 in position 9: ordinal not in range(128)
- 数据结构之常见的排序算法2
- Binary Tree Postorder Traversal - LeetCode 145
- python 服务器和客户端简单原型
- 【转载】【译文】Lisp魔咒:对Lisp的非技术性吐槽
- Win32调试API原理
- 文件存储的实现-login登录案例2-sdcard
- 程序源代码复制到word格式不变
- juquery源码研究:addEventListener与attachEvent区别
- C++友元复习