快速排序
来源:互联网 发布:mac 开发php 必备软件 编辑:程序博客网 时间:2024/06/06 03:17
从待排序区间中任取一个记录(通常是第一个)作为枢纽记录(即基准记录),所有比基准记录小的记录一律放在其左侧,所有比基准记录大的记录一律放在右侧,形成两个子表;枢纽记录放在两个子表中间的位置(也是枢纽记录最终的位置)。然后对两个子表重新选择枢纽记录,重复上述操作。
#include <stdio.h>#define N 200int a[N];int quick(int i,int j){ while (i<j) { //对当前待排序从右侧(j指向的记录)开始向左侧进行扫描,直到找到第一个关键值小于枢纽记录关键值记录 while (i<j&&a[0]<=a[j]) j--; a[i]=a[j]; //将比枢纽记录小的关键值交换到左侧 //对当前待排序从左侧(i指向的记录)开始向右侧进行扫描,直到找到第一个关键值大于枢纽记录关键值记录 while (i<j&&a[0]>=a[i]) i++; a[j]=a[i]; //将比枢纽记录大的关键值交换到右侧 } a[i]=a[0]; // return i;}void sort(int i,int j){ int mid; if (i<j) { //一般将待排序区间最左侧值作为枢纽记录 mid=quick(i,j); a[0]=a[i]; //枢纽记录保存在a[0] sort(i,mid-1); a[0]=a[mid+1]; //枢纽记录保存在a[0] sort(mid+1,j); }}int main(){ int n,x,y; int i; scanf("%d",&n); //排序的数据量 for (i=1; i<=n; i++) scanf("%d",a+i); a[n+1]=n; scanf("%d %d",&x,&y); //排序的起始位置和终止位置 a[0]=a[x]; sort(x,y); for (i=1; i<=n; i++) printf("%3d",a[i]); return 0;}
阅读全文
0 0
- 快速排序
- 快速排序
- 快速排序
- 快速排序!
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 【赠书】从商用到开源:15个维度,全面剖析DB2与MySQL数据库的差异
- 详解 db file sequential read 等待事件
- 指针,&,*操作符
- com.sanwin.acdm.modules.sys.listener.WebContextListener
- android studio3.0 编译 Cannot set the value of read-only property 'outputFile' for apkVariantOutputImp
- 快速排序
- 网络访问流程 与 http流程
- How to get rid of this annoying W8123 warning in my IDE
- VUE优秀UI组件库合集
- Sqlserver2008连接失败的N种可能及解决方案
- Java中abstract class 和 interface 的解释和他们的异同点(转)
- pandas:填充缺失值 fillna("missing") 和fillna("missing",inplace=True)的区别
- Effective Java之用私有构造器或者枚举类型强化Singleton属性(三)
- [iOS11 + Xcode9 各大好文汇总]