快速排序的基本实现(完整源代码)
2015-11-09 15:26
441 查看
优化版的快速排序算法,请看这里:
/article/3721502.html
以下是经典快速排序的完整源代码。
基本原理是:
先将待排序列一分为二,将某一元素设置为枢轴pivot,通过逐个比较,然后将比pivot小的数据换到左边,比pivot大的元素换到右边。
一组完成后,将排好的较小部分和较大部分,继续做递归排序。
也就是,将排好的较小部分再一分为二,同样把较大的部分一分为二,然后将较小部分排序后得到的较较小部分再一分为二······一直递归到low=high,也就是只有一个元素的时候,结束递归。
以上是最基本的代码,是看《大话数据结构》时根据书上代码编写的,适合最基础的人看,有问题可以评论,同是菜鸟,我们一起讨论嘛~
/article/3721502.html
以下是经典快速排序的完整源代码。
基本原理是:
先将待排序列一分为二,将某一元素设置为枢轴pivot,通过逐个比较,然后将比pivot小的数据换到左边,比pivot大的元素换到右边。
一组完成后,将排好的较小部分和较大部分,继续做递归排序。
也就是,将排好的较小部分再一分为二,同样把较大的部分一分为二,然后将较小部分排序后得到的较较小部分再一分为二······一直递归到low=high,也就是只有一个元素的时候,结束递归。
[code]//快速排序 #include<stdio.h> #include<stdlib.h> #define MAXSIZE 10 typedef struct { int r[MAXSIZE+1]; int length; }SqList; //交换函数 void swap(SqList *L,int i,int j) { int temp=L->r[i]; L->r[i]=L->r[j]; L->r[j]=temp; } //将比枢轴pivotkey小的元素放到左边,大的放到右面,然后将pivotkey放入合适的位置 int Partition(SqList *L,int low,int high) { int pivotkey; pivotkey=L->r[low]; //将第一个元素作为枢轴pivotkey while(low<high) //从表的两端交替向中间扫描 { while(low<high && L->r[high]>=pivotkey) //从右边起,将比pivotkey小的换到左边 high--; swap(L,low,high); while(low<high && L->r[low]<=pivotkey) //从左边起,将比pivotkey大的换到右边 low++; swap(L,low,high); } return low; //low与high相等时,即为枢轴位置 } //递归函数 void QSort(SqList *L,int low,int high) { int pivot; if(low<high) { pivot=Partition(L,low,high); //将表一分为二 QSort(L,low,pivot-1); //低子表继续递归 QSort(L,pivot+1,high); //高子表继续递归 } } //初始化函数 int Init(SqList ** L) { *L=NULL; *L=(SqList *)malloc(sizeof(SqList)); if(*L==NULL) { return 0; } (*L)->length=0; return 1; } //插入函数 void Insert(SqList **L,int data) { if(data) { (*L)->length++; (*L)->r[(*L)->length]=data; } } //输出函数 void Printf(SqList *L) { int i; for(i=1;i<=L->length;i++) { printf("%d ",L->r[i]); } } //主函数 void main() { SqList *L; int i; Init(&L); int a[]={55,44,11,22,33,77,45,68,95,61}; for(i=0;i<10;i++) { Insert(&L,a[i]); } QSort(L,1,L->length); Printf(L); }
以上是最基本的代码,是看《大话数据结构》时根据书上代码编写的,适合最基础的人看,有问题可以评论,同是菜鸟,我们一起讨论嘛~
相关文章推荐
- Java动态代理的两种实现方法
- JAVA学习6_Eclipse打开已有工程和导入jar包
- Python学习之路六---迭代器、生成器
- Java 工厂模式
- php内存管理
- eclipse 误删文件的恢复,代码的恢复
- Python SocketServer.py
- 解决QT中中文乱码问题
- C#中使用#region指令的一些想法
- 通过java反射技术获取泛型的真实类型并对其实例化
- 【详解】Python统一解密再改进版逻辑分析
- Java栈和Java堆
- 《用Python玩转数据》第1周学习笔记(Part2)
- PHP上传文件问题小议(一)无权限创建文件目录
- C#单列模式
- Java类加载
- 尝试使用Python多线程抓取代理服务器IP地址的示例
- java中的枚举类型
- 关于selenium 用Webdrive打开Firefox不含有插件的问题(python)
- JAVA——基本数据类型之间的自动转换