数据结构-排序进阶代码
来源:互联网 发布:淘宝网店怎么激活 编辑:程序博客网 时间:2024/06/18 10:55
1.插入排序中找插入位置的操作可以通过二分查找法来实现。请设计一个这样的改进的插入排序算法。
void InsertSort(int A[], int n){//排序是A[0]~A[n]int i,j,low,high,mid;for(i=2;i<=n;i++){A[0]=A[i];low=1;high=i-1;while(low<=high){mid=(low+high)/2;if(A[mid]>A[0])high=mid-1;//查找左半子表elselow=mid+1//查找右半子表}for(j=i-1;j>=high+1;--j)A[j+1]=A[j];A[high+1]=A[0];}}
2.快速排序算法中,如何选取一个界值(又称为轴元素分割线),影响着快排的效率,且界值夜并不一定是被排序的序列中的一个元素。例如,我们可以用被排序的序列中所有元素的平均值作为界值。试编写一个算法实现以平均值为界值得快速排序算法。
void QuickSort(int A[], int n){QSort(A,0,n-1);//从数组下标为0开始排}void QSort(int A[],int left,int right){int i,j;if(left<right){int pivot=0;//界值for(i=left;i<=right;i++)pivot=pivot+A[i];pivot=pivot(right-left+1);i=left;j=right+1;do{do i++; while(A[i]<pivot&&i<=right);do j--; while(A[j]>pivot&&j>=left);if(i<j)Swap(A[i],A[j]);}while(i<j)Swap(A[left],A[j]);QSort(A,left,j);QSort(A,j+1,right);}}
3.奇偶交换排序是另外一种交换排序。它的第一趟对序列中的所有奇数项i扫描,第二趟对序列中的所有偶数项i扫描。若A[i]>A[i+1],则交换他们。第三趟又对所有奇数项,第四趟对所有的偶数项,如此反复,直到整个序列全部排序好为止。
void odd-evenSort(int A[],int Size){int i,exchange;do{for(i=1;i<Size;i+=2)if(A[i]>A[i+1]){exchange=1;Swap(A[i],A[i+1]);}for(i=0;i<Size;i+=2)if(A[i]>A[i+1]){exchage=1;Swap(A[i],A[i+1]);}}while(exchage!=0)}
4.设数组中存放了一个无序的关键字序列K0、K1、……..、Kn-1。现要将一指定的元素Ki放在该元素在排序之后的正确位置上(例如,对于序列23,12,8,45,38而言,元素23排序后应放在2号位,从0开始编号),试编写算法实现上述功能,要求比较次数不超过n。
void SetLoc(int K[],int n,int i){//将下标为i的元素归为if(i<0||i>=n){cout<<”The index i is illegal”;return;}int seq=0;for(int j=0;i<n;j++)if(K[j]<k[i])seq++;Swap(K[i],K[seq]);}
5.上题参考快排的思想
void SetLoc(int A[],int n,int i){int k=0,j=n+1;//排序为0~n,n后面是无穷大do{do k++; while(A[k]<A[i]);do j--;while(A[j]>A[i]);if(i<j)Swap(A[i],A[j]);}while(k<j);Swap(A[left],A[j]);}
阅读全文
0 0
- 数据结构-排序进阶代码
- 数据结构-树的进阶代码
- 数据结构-图的进阶代码
- 数据结构-排序基础代码
- 10. 数据结构进阶十排序相关概念
- 13. 数据结构进阶十三排序实现之希尔排序法
- 14. 数据结构进阶十四排序实现之简单选择排序
- 15. 数据结构进阶十五排序实现之堆排序
- 17. 数据结构进阶十七排序实现之归并排序
- 18. 数据结构进阶十八排序实现之快速排序
- 数据结构之排序算法代码
- 数据结构排序算法代码实现
- java数据结构代码记录---归并排序代码
- 6. 数据结构进阶六之二叉树排序树
- 11. 数据结构进阶十一排序实现之冒泡法
- 12. 数据结构进阶十二排序实现之直接插入法
- 16. 数据结构进阶十六排序实现之基数排序
- 19. 数据结构进阶十九外部排序相关概念
- seo团队构建以及分工的相应说明
- Search a 2D Matrix II
- 布谷鸟搜索算法
- c++深拷贝问题
- Java TCP网络编程
- 数据结构-排序进阶代码
- Collections 工具类
- Eclipse 版本发布规律
- python中input()和raw_input的区别
- E
- [leetcode] 13. Roman to Integer
- 2017年12月16日 第三十八天次总结
- Nginx的反向代理与负载均衡
- Median of Two Sorted Arrays