一. 算法描述

  快速排序:快速排序采用分治法进行排序,首先是分割,选取数组中的任意一个元素value(默认选用第一个),将数组划分为两段,前一段小于value,后一段大于value;然后再分别对前半段和后半段进行递归快速排序。其实现细节如下图所示:

二. 算法实现

/*=============================================================================
#
# FileName: fastSort.c
# Algorithm: 快速排序
# Author: Knife
# Created: 2014-06-16 21:24:02
#
=============================================================================*/
#include<stdio.h>
void fastSortImp(int* intArrStart, int len);
void main(){
int intArr[] = {,,,,,,,,,};
int n = sizeof (intArr) / sizeof (intArr[]); // 数组长度
int i = ;
//快速排序
fastSortImp(intArr,n);
//打印输出
for(;i<n;i++){
printf("%d ",intArr[i]);
}
printf("\n");
} //快速排序,应该分为两步:首先找到分割点,然后在对分割点的左侧和右侧分别进行递归
void fastSortImp(int* intArrStart, int len){
if(len > ){
int i = ;
int j = len-;
int intTmp = intArrStart[];
while(j > i){
// 从右向左查找比intTmp小的
while(j > i && intArrStart[j] >= intTmp){
j--;
}
if(j >i ){
intArrStart[i] = intArrStart[j];//将s[j]填到s[i]中,s[i]就形成了一个新的坑
i++;
}
// 从左向右查找比intTmp大的
while(j > i && intArrStart[i] <= intTmp){
i++;
}
if(j > i){
intArrStart[j] = intArrStart[i];//将s[i]填到s[j]中,s[j]就形成了一个新的坑
j--;
}
} intArrStart[i] = intTmp;//找到分割点。此时 i等于j。将intTmp填到这个坑中
// 前半段
fastSortImp(intArrStart, i);
// 后半段
fastSortImp(intArrStart + i + , len - i-); }
}

三. 算法分析

  • 平均时间复杂度:O(nlog2n)
  • 空间复杂度:O(n)
  • 稳定性:不稳定

参考资料

  [1] http://blog.csdn.net/cjf_iceking/article/details/7925470

  [2] http://blog.csdn.net/morewindows/article/details/6684558

  [3] http://baike.baidu.com/view/19016.htm

【Algorithm】快速排序的更多相关文章

  1. Algorithm --> 快速排序

    快速排序 算法思想 快速排序采用的思想是分治思想. 快速排序是找出一个元素(理论上可以随便找一个)作为基准(pivot),然后对数组进行分区操作,使基准左边元素的值都不大于基准值,基准右边的 元素值都 ...

  2. 【Algorithm】快速排序(续)

    前面在常用的排序算法中,已经写过一篇关于快速排序算法的博客,但是最近看到<The C Programming Language>这本书中的快速排序算法写的不错,所以就拿过来分享一下,下面我 ...

  3. 常见的排序算法之Java代码解释

    一 简要介绍 一般排序均值的是将一个已经无序的序列数据重新排列成有序的 常见的排序分为: 1 插入类排序 主要就是对于一个已经有序的序列中,插入一个新的记录.它包括:直接插入排序,折半插入排序和希尔排 ...

  4. Java研发工程师面试题

    基础题 一.String,StringBuffer, StringBuilder 的区别是什么?String为什么是不可变的?1. String是字符串常量,StringBuffer和StringBu ...

  5. 普林斯顿大学算法课 Algorithm Part I Week 3 快速排序 Quicksort

    发明者:Sir Charles Antony Richard Hoare 基本思想: 先对数据进行洗牌(Shuffle the array) 以数据a[j]为中心进行分区(Partition),使得a ...

  6. Algorithm: quick sort implemented in python 算法导论 快速排序

    import random def partition(A, lo, hi): pivot_index = random.randint(lo, hi) pivot = A[pivot_index] ...

  7. Java 快速排序两种实现

    快速排序,只要学习过编程的人肯定都听说过这个名词,但是有时候写的时候还真蒙住了,网上搜罗了下以及查阅了"introduction to algorithm",暂时找到两种实现快排的 ...

  8. 算法实例-C#-快速排序-QuickSort

    算法实例 ##排序算法Sort## ### 快速排序QuickSort ### bing搜索结果 http://www.bing.com/knows/search?q=%E5%BF%AB%E9%80% ...

  9. 数据结构(DataStructure)与算法(Algorithm)、STL应用

    catalogue . 引论 . 数据结构的概念 . 逻辑结构实例 2.1 堆栈 2.2 队列 2.3 树形结构 二叉树 . 物理结构实例 3.1 链表 单向线性链表 单向循环链表 双向线性链表 双向 ...

随机推荐

  1. 编程王道,唯“慢”不破

    原文地址 人和人之间编程速度的差异还是很大的,有的程序猿写代码非常快,有的却常常是龟速.Jeffrey Ventrella 最近在一篇文章里探讨了这种编程速度的差异,他是绝对的龟速派代表,来看看他对编 ...

  2. C#.NET常见问题(FAQ)-如何修改Form不能修改窗体大小

    把FormBorderSytle改一下就可以了,改成FixedSingle或者Fixed3D都可以   更多教学视频和资料下载,欢迎关注以下信息: 我的优酷空间: http://i.youku.com ...

  3. ArcMap工具箱参数名称的Bug

    已经忍了很久了,今天一定要说一说,强大的 ArcGIS居然还存在这种Bug问题.如下图所示:使用了追加工具,有三个要素图层,且三个数据与目标数据不是同一数据,但它们的名称一致,这样执行,将会出现&qu ...

  4. android中RecyclerView控件的列表项横向排列

    本文是在上一篇文章的基础上做的修改:android中RecyclerView控件的使用 1.修改列表项news_item.xml:我这里是把新闻标题挪到了新闻图片的下面显示 <?xml vers ...

  5. iSCSI Network Designs: Part 5 – iSCSI Multipathing, Host Bus Adapters, High Availability and Redundancy

    iSCSI Network Designs: Part 5 – iSCSI Multipathing, Host Bus Adapters, High Availability and Redunda ...

  6. Linux中查看系统版本的方法

    一.Linux系统中,XShell连接进去之后,查看系统版本的方法如下: 1.查找release文件 find /etc/ -name *-release 例如: 或者 2.查看release文件 c ...

  7. 002-Go通过ioutil 读写文件

    1.读取文件内容 package main import( "io/ioutil" "fmt" ) func main(){ b,err := ioutil.R ...

  8. 转:nginx基础概念(connection)

    在nginx中connection就是对tcp连接的封装,其中包括连接的socket,读事件,写事件.利用nginx封装的connection,我们可以很方便的使用nginx来处理与连接相关的事情,比 ...

  9. uva 1658 Admiral (最小费最大流)

    uva 1658 Admiral 题目大意:在图中找出两条没有交集的线路,要求这两条线路的费用最小. 解题思路:还是拆点建图的问题. 首先每一个点都要拆成两个点.比如a点拆成a->a'.起点和终 ...

  10. IF函数

    语法:IF(logical_test,value_if_true,value_if_false) logical_test:表示计算结果为 TRUE 或 FALSE 的任意值或表达式 value_if ...