设为首页 加入收藏

TOP

快速排序(C语言实现)
2014-11-24 08:27:29 来源: 作者: 【 】 浏览:0
Tags:快速 排序 语言 实现

1.起因
今天在acm刷题的时候,之前的排序算法一直都是冒泡,可能九度OJ的难度题考察的都是快速排序,导致我都是死在time limited上,因此我下决心要学习一下快速排序,心得跟大家进行分享!


2.算法思想
快速排序采用了一种分治策略,我感觉它就是归并排序的优化,学术上称之为分治法(Divide-and-ConquerMethod)
(1)分治的基本思想:
将原问题分解成若干个规模更小但是结构跟原问题相似的子问题。递归的解决这些子问题,然后将这些子问题的解喝并为原问题的解
(2)快速排序的思想:
设当前需要排序的数组为int A[low..high]
分解:
在A[]中任选一个记录作为基准(pivot),以pivot为基准将数组A划分为两个小的数组A[low..pivot-1]和A[pivot+1..high],并使左边的数组元素均小于等于pivot,右边数组元素均大于等于piovt。此时,pivot处于正确的位置上,它不需要再参加后续的排序
求解:
递归的调用快速排序,对A[low..pivot-1]和A[pivot+1..high]进行快速排序
组合:
跟归并排序不同,因为每次调用快速排序,左右两个数组均已有序,因此对于快速排序来说,组合是一个空操作


3.快速排序程序实现
主流程:


/**
* Description:快速排序主流程
*/
void quicksort(int *A, int p, int r)
{
int pivot;

if( p < r)
{
pivot = partition(A, p, r);
quicksort(A, p, pivot - 1);
quicksort(A, pivot+1, r);
}
}


注意:为排序整个数组,只需要在main函数中调用一个quicksort(A,begin,end)即可完成对数组的排序。


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇C语言调用库函数qsort()进行快速.. 下一篇Java垃圾回收机制与引用类型

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·Python 数据分析与可 (2025-12-26 21:51:20)
·从零开始学Python之 (2025-12-26 21:51:17)
·超长干货:Python实 (2025-12-26 21:51:14)
·为什么 Java 社区至 (2025-12-26 21:19:10)
·Java多线程阻塞队列 (2025-12-26 21:19:07)