快速排序,“两头交换”法 ,实现
来源:互联网 发布:虚拟歌姬软件多少钱 编辑:程序博客网 时间:2024/04/30 18:25
// 快速排序,是一种分治的思想。如将 7 12 3 5 8 5 选择以7为基准点进行一趟排序后序列为5 3 5 7 8 12
// 然后分别再对(5 3 5)(8 12)递归,进行快速排序。
其中的难点在于,如何实现以7为中心点,将序列再分为两段。下面介绍使用“两段交换”法来实现分块:
#include <stdio.h>#include <stdlib.h>void ksort(int a[],int low,int high)//low high 为目标排序序列的起始位,结束位{ int mid,i,j,t; //mid 为设定的快速排序分堆的值,以序列中间元素的值为基准位置 if(low>=high) return ; mid=a[(low+high)/2]; i=low,j=high; while(i<j) { while(a[i]<mid) i++;//从前向后搜索,遇到大于mid的位置,搜索停止while(a[j]>mid) j--;//从后向前搜索,遇到小于mid值的位置,搜索停止if(i<=j) //对一次搜索前后停下来的两个位置,进行两个位置的数值交换{t=a[i];a[i]=a[j];a[j]=t;i++; j--;//交换之后,后面的哨兵i前进一步,前面的哨兵j再向后一步} //由于前面i<=j的条件因此一趟排序结束后出现i==j或j<i的情况 } //剩余的两个堆为(low...j ) (i....high) ksort(a,low,j);//递归调用快排函数,对两个堆再进行快速排序 ksort(a,i,high);}int main(int argc, char *argv[]) {int s[100],n,i;scanf("%d",&n);for(i=1;i<=n;i++) scanf("%d",&s[i]);ksort(s,1,n);for(i=1;i<=n;i++)printf("%d ",s[i]);printf("\n");return 0;}
0 0
- 快速排序,“两头交换”法 ,实现
- 交换排序之快速排序Java实现
- Java实现交换排序之快速排序
- 数据结构-排序: 交换排序(快速排序法)
- 数据结构-排序: 交换排序(快速排序法)
- 交换排序--快速排序
- 交换排序:快速排序
- 交换排序-快速排序
- 交换排序-快速排序
- 交换排序------快速排序
- 【交换排序】快速排序
- 交换排序---快速排序
- 交换排序-快速排序
- 交换排序-快速排序
- 交换排序--快速排序
- 交换排序-快速排序
- 交换排序实现(冒泡排序,快速排序)
- Java实现交换排序 之 冒泡排序和快速排序
- vector::push_back函数解析
- 一些網絡分析工具的使用(Wireshark,Fiddler)
- 【iOS7的一些总结】9、用列表显示内容(上):列表视图UITableView
- (三)Buffer
- oracle数据库登录、DDL触发器的应用
- 快速排序,“两头交换”法 ,实现
- 《数据结构习题与解析》第一章 绪论
- IE8的div中使用Iframe出现下拉框形式,而IE7却没有
- ubuntu下配置java
- 赵雅智_BroadcastReceiver电话监听
- 行走无疆 C++ 连接mysql等数据库
- 不打开文件,读取Rvt文件中的信息
- 数据挖掘绪论
- MATLAB 与图像处理