快速排序
来源:互联网 发布:可以看腐剧的软件 编辑:程序博客网 时间:2024/06/14 01:03
排序算法思想:
从待排序元素序列中取出一个元素(通常选取第一个元素)为基准记录元素,然后将其余元素中小于基准元素的元素移到前面,而将大于或等于基准元素的元素移到后面,结果将带排序元素序列分成了两个子序列,最后将基准记录元素插到分界线处,对分割后的子序列继续按上述原则进行分割,直到所有子序列的长度不超过1为止,此时的待排序记录序列就变成了一个有序序列。
快速排序过程:
代码如下
#include<stdio.h>#include<string.h>/*用基准记录对arr[low]至arr[high]部分进行一趟排序划分,并得到基准记录的新位置,使得基准记录之前的元素都小于基准记录元素,而基准记录之后的元素均大于基准记录元素*/int partition(int *arr,int low,int high){ int x=*(arr+low);//设置基准记录 x while(low<high) { while(low<high&&*(arr+high)>=x)//high从右边至左边 如果找到小于x的元素则退出while循坏 { high--; } if(low<high) { *(arr+low)=*(arr+high); //找到小于x的元素,则送入"空单元"*(arr+low)中 low++; } while(low<high&&*(arr+low)<x)//low从左边至右边找 如果找到大于x的元素则退出while循环 { low++; } if(low<high) { *(arr+high)=*(arr+low);//找到大于或等于x的元素 则送入"空单元"*(arr+high)中 high--; } } *(arr+low)=x;//将基准元素保存到low=high的位置 return low;//返回基准元素的位置}void sort(int *arr,int low,int high){ int mid; if(low<high) { mid=partition(arr,low,high);//调用一趟排序 以轴元素为基准 将数组划分为两部分 sort(arr,low,mid-1);//对左边进行排序 sort(arr,mid+1,high);//对右边进行排序 }}void main(){ int arr[]={48,62,35,14,36,98}; int low=0; int len=sizeof(arr)/sizeof(arr[0]); int high=len-1; sort(arr,low,high); for(int i=0;i<len;i++) { printf("%3d",arr[i]); }}
阅读全文
0 0
- 快速排序
- 快速排序
- 快速排序
- 快速排序!
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- React全家桶构建一款Web音乐App实战3
- Node.js安装及环境配置之Windows篇
- linux下QT添加第三方库
- ajax提交表单
- mybatis 向数据库插入数据时获取其主键值(序列值)的实现小记
- 快速排序
- 文本框绑定enter事件后,除了执行绑定文本框方法外,页面再刷新一次
- python基础1
- Gobblin Rest Api
- js实现弹窗
- opencv3.0 无法使用FeatureDetector.SURF
- python刷题—转换编程思想到python!
- Java中堆和栈的基本概念
- docker容器和镜像区别