快速排序详解
来源:互联网 发布:java的数据类型 编辑:程序博客网 时间:2024/06/18 04:28
[算法分析]
快速排序是对冒泡排序的一种改进。它的基本思想是:通过一趟排序将待排序记录分割成独立的两部分,其中一部分记录的关键字均比另一部分记录的关键字小,则可分别对这两部分记录继续进行排序,以达到整个序列有序。
一趟快速排序的具体做法是:附设两个指针i和j,它们的初值分别为l和r ,设枢轴记录取mid,则首先从j所指位置起向前搜索找到第一个关键字小于mid的记录,然后从i所指的位置起向后搜索,找到第一个关键字大于mid的记录,将它们互相交换,重复这两步直到i>j为止。
[参考代码]
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int a[101];
void qsort(int,int);//子函数在主函数之后编写,则需在主函数前先声明
int main()
{
int n,i;
cin>>n;
for(i=1;i<=n;i++)
cin>>a[i];
qsort(1,n);
for(i=1;i<=n;i++)
cout<<a[i]<<" ";
cout<<endl;
}
void qsort(int zuo,int you)
{
int i,j,mid,p;
i=zuo;j=you;
mid=a[(zuo+you)/2];
do
{
while(a[i]<mid)i++;//在左半部分寻找比中间数大的数
while(a[j]>mid)j--;//在右半部分寻找比中间数小的数
if(i<=j)//若找到一组与排序目标不一致的数对,则交换它们
{
p=a[i];a[i]=a[j];a[j]=p;
i++;j--;//继续找
}
}while (i<=j);//注意这里不能少了等号
if(zuo<j)qsort(zuo,j);//若未到两个数的边界,则递归搜索左右区间
if(i<you)qsort(i,you);
}
//快速排序的时间复杂性是o(nlog2n),速度快,但它是不稳定的排序方法。就平均时间而言,快速排序是目前被认为是最好的一种内部排序方法。
测试数据 8
36 25 48 12 65 43 20 58
重点理解 12 与 36 的交换,及第二轮执行 qsort(2,8)
- 快速排序详解
- 快速排序(详解)
- 快速排序法详解
- 快速排序详解
- 快速排序 详解
- 快速排序法详解
- 快速排序法详解
- Java快速排序详解
- 快速排序详解
- 快速排序详解
- 快速排序详解
- 快速排序--过程详解
- 快速排序详解
- 快速排序详解
- 快速排序代码详解
- 【19】-快速排序详解
- 快速排序详解
- 快速排序详解
- YV12格式介绍
- Error Domain=com.alamofire.error.serialization.response Code=-1011 "Request failed: bad request (400
- ROS环境变量的设置
- Get Record(s) by Ids
- HDU 1242 Rescue
- 快速排序详解
- margin布局居中显示
- android中的broadcastReceiver
- ubuntu 下 vim安装和配置
- asdfghj
- 内存管理浅谈
- fio 磁盘I/O测试
- css颜色代码对照
- 洛谷P1231:教辅的组成(网络流)