快速排序(quicksort)算法实现
快速排序算法如下
{
int i;
if(p < r)
{
i = partition(A, p, r);
quicksort(A, 0, i - 1);
quicksort(A, i + 1, r);
}
}
其中partition函数将得到X所在的位置i(在这里总以数组的最后一个元素为轴)。
{
int i = p - 1, j;
for(j = p; j < r; j++)
{
if(A[j] >= A[r])
{
i++;
swap(&A[i], &A[j]);
}
}
swap(&A[i + 1], &A[r]);
return i + 1;
}
由于总是选择数组的最后一个元素做为轴,因此可能出现X的左边为n - 1或接近n - 1个元素,而右边没有元素,或元素很少的情况,即X最大或比较大。这样使quicksort将出现最坏的情况,也就是时间复杂度为O(n^2)。因此partition可以采用随机方式得到轴X的位置i。 这样它的平均情况是非常好的(时间复杂度为O(nlogn)),也就是说,最坏情况很难出现。
{
return (min + (int)(((float)rand()/RAND_MAX)*(max - min)));
}
int randomize_partition(int A[], int p, int r)
{
int i = new_random(p, r);
swap(&A[i], &A[r]);
return partition(A, p, r);
}
完整的代码如下
#include <stdlib.h>
void out_int_array(int data[], int n)
{
int i;
for(i = 0; i < n; i++)
{
printf("%d ", data[i]);
}
printf("\n");
}
void swap(int *a, int *b)
{
int x;
x = *a;
*a = *b;
*b = x;
}
int new_random(int min, int max)
{
return (min + (int)(((float)rand()/RAND_MAX)*(max - min)));
}
int partition(int A[], int p, int r)
{
int i = p - 1, j;
for(j = p; j < r; j++)
{
if(A[j] >= A[r])
{
i++;
swap(&A[i], &A[j]);
}
}
swap(&A[i + 1], &A[r]);
return i + 1;
}
void quicksort(int A[], int p, int r)
{
int i;
if(p < r)
{
i = partition(A, p, r);
quicksort(A, 0, i - 1);
quicksort(A, i + 1, r);
}
}
int randomize_partition(int A[], int p, int r)
{
int i = new_random(p, r);
swap(&A[i], &A[r]);
return partition(A, p, r);
}
void randomize_quicksort(int A[], int p, int r)
{
int i;
if(p < r)
{
i = randomize_partition(A, p, r);
quicksort(A, 0, i - 1);
quicksort(A, i + 1, r);
}
}
int main()
{
int A[] = {4, 1, 44, -12, 5, 125, 30};
int B[] = {4, 1, 44, -12, 5, 125, 30};
out_int_array(A, 7);
quicksort(A, 0, 6);
out_int_array(A, 7);
printf("--------------------------randomize-----------------------------\n");
srand((unsigned)time( NULL ));
randomize_quicksort(B, 0, 6);
out_int_array(B, 7);
return 0;
}
快速排序(quicksort)算法实现相关推荐
- 快速排序quicksort算法优化
1.基本想想 快速排序使用分治的思想 通过一趟排序将待排序列分割成两部分,其中一部分所有元素均比基准大,另一部分均比基准小 分别对这两部分元素继续进行排序,以达到整个序列有序 2.快排的步骤 1.选择 ...
- 快速排序quicksort算法细节优化(一次申请内存/无额外内存排序)
文章目录 1.只申请一次内存,避免多次递归调用时反复的申请和释放内存,提高程序运行效率 2.不申请内存,在原数组上直接排序 优化比较总结 对链接中快速排序进行代码优化 https://blog.csd ...
- quicksort算法_QuickSort算法–用C,Java,Python实现
quicksort算法 介绍 (Introduction) Quicksort algorithm is one of the fastest internal sorting algorithms ...
- 快速排序(QuickSort)算法介绍
算法简介 快速排序(Quicksort)是对冒泡排序的一种改进算法.由C. A. R. Hoare在1960年提出.该算法使用广泛.效率很高,是最重要的排序算法之一. 该算法的实现基本可分为以下几步: ...
- 理解快速排序 | 打通算法学习的任督二脉
本文作者胡光 前百度高级算法研发工程师,ACM 国际大学生程序设计大赛亚洲区金牌获得者 具体内容来自他在极客时间开设的免费公开课<常用算法 25 讲> 排序算法在工作中最常用,也是学习很多 ...
- C语言quick sort快速排序的算法(附完整源码)
C语言quick sort快速排序的算法 C语言quick sort快速排序的算法完整源码(定义,实现) C语言quick sort快速排序的算法完整源码(定义,实现) #ifndef QUICK_S ...
- 快速排序(quickSort) 和 插入排序(insertSort)
1.快速排序(quickSort) (1)在数据集之中,选择一个元素作为"基准"(pivot). (2)所有小于"基准"的元素,都移到"基准" ...
- quicksort java_Java代码实现快速排序(QuickSort)
Java代码实现快速排序(QuickSort) 核心思想 如果要排序数组中下标从p到r之间的一组数据,我们选择p到r之间的任意一个数据为pivot(分区点). 我们遍历p到r之间的数据,将小于pivo ...
- 数据算法之快速排序(quickSort)的Java实现
本文的代码来自于<数据结构与算法(JAVA语言版)>,是笔者在网上找到的资料,非正式出刊版物.笔者对代码一些比较难以理解的部分添加了注释和图解,欢迎大家来讨论. 快速排序的基本思想是通过一 ...
最新文章
- linux parted rpm,为Everest Linux构建QtParted的rpm包(四)
- Linux教程 网络管理命令Netstat的使用
- 七年前将UC卖给马云,套现300亿的何小鹏,现今再创新奇迹?播报文章
- 在对比了 GitHub 5000 个 Python 项目之后,我们精选出了这 36 个!
- 你遇到过最有诗意的句子是什么?
- Python学习笔记 03 Python对象
- 大漠软件c语言教程,大漠万能脚本编辑器无需写代码,截图可以制作脚本附视频教程...
- nexus6 android 6.0 root,KingRoot国内首个攻破Nexus6 支持超万款手机一键Root
- NC生成单据PK主键
- homeassistant搭建_安卓环境home assistant搭建
- 赖美云的认证照_火箭少女最新路透照出炉:吴宣仪赖美云魅力十足,张紫宁傅菁凭颜值圈粉...
- kafka auto.offset.reset值失效 earliest/latest详解
- 知道打印机的IP地址,win10怎样连接打印机?
- 嵌入式linux 修改mac,MAC to MAC 环境下,嵌入式linux的修改
- 西北乱跑娃 --- python opencv图像祛噪
- HP(惠普)大中华区总裁孙振耀退休感言
- 学习笔记:网络层,IP包头,路由器配置
- 【能源管理】制造行业中汽车厂房综合能效管理平台应用分析
- C语言数据结构 单链表的建立、遍历、查找、插入和删除操作
- 第四章 web前端开发工程师--JavaScript京东商城项目开发 4-1 京东商城顶部图片效果
热门文章
- 初学 Python(十三)——匿名函数
- Entity Framework 学习笔记(1)
- Oracle查询重复数据并删除,只保留一条记录
- IOS添加KeyMob广告管理库中文教程
- MSMQ: C# MSMQ编程问题
- 在编写存储过程时使用 Set NoCount On
- Katalon Studio自动化测试框架使用【2】--- 项目设置(MacOS)
- Received status code 403 from server: ForbiddenDisable Gradle ‘offline mode‘ and sync project
- Error: Command failed: xcrun instruments -s
- Xamarin.Android编译CPU类型选择方式