一. 算法描述

  快速排序:快速排序采用分治法进行排序,首先是分割,选取数组中的任意一个元素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. 什么是哈希码(HashCode)

    什么是哈希码(HashCode) 在Java中,哈希码代表对象的特征. 例如对象 String str1 = “aa”, str1.hashCode= 3104 String str2 = “bb”, ...

  2. android中实现简单的聊天功能

    这个例子只是简单的实现了单机版的聊天功能,自己跟自己聊,啦啦~~ 主要还是展示RecyclerView控件的使用吧~ 参考我之前写的文章: android中RecyclerView控件的使用 andr ...

  3. iOS 8 swift 键盘不出来 ios 8 uitextfield keyboard not appearing

    ios 8 uitextfield keyboard not appearing //发现在iphone 6 and iPhone plus 上面键盘不出来.后来查了下原来要在模拟器里设置下 var ...

  4. Windows 10 中的 Shell 指令

    这篇文章本无技术含量,也不高大上,不过想想,还是写下来吧,肯定有人会用得到的. 常玩系统的朋友,应该知道 Shell 指令,这是一个很好玩很神奇的指令.利用它,可以用简短的单词,轻易地打开系统中的一些 ...

  5. js 判断l对象类型

    var obj = {}; obj.isObject = function (obj) { return Object.prototype.toString.call(obj) == '[object ...

  6. jquery_opacity_css透明

    语法: $(selector).animate({params},speed,callback); 示例一.jquery_opacity_css透明 $(function () { $('.conta ...

  7. format ZKFC失败

    at org.apache.hadoop.ha.ActiveStandbyElector$WatcherWithClientRef.waitForZKConnectionEvent(ActiveSta ...

  8. 深度学习-Caffe编译测试的小总结

    1. 搭建的环境和代码:win7 64bit + vs2013+CUDA7.5 http://blog.csdn.net/thesby/article/details/50880802 2. 编译,制 ...

  9. 演示一下:rm -rf /

  10. vue refs v-for 使用注意

    当 v-for 用于元素或组件的时候,引用信息将是包含 DOM 节点或组件实例的数组. https://cn.vuejs.org/v2/api/#ref https://www.w3cplus.com ...