博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
快速排序算法之我见(附上C代码)
阅读量:6849 次
发布时间:2019-06-26

本文共 1046 字,大约阅读时间需要 3 分钟。

因为<The C Programming Language>一书中有一个练习,需要用到快速排序,所以又复习了一下,感觉收获颇多,故而分享之。

快速排序的核心是一种 divide and conquer 算法。可惜我们接触的中文书籍里面,突出强调了一趟快速排序怎么做,而没有重点介绍这种编程思想,可谓是本末倒置。单就一趟排序的细节来说,有很多中实现版本,每种版本都是处于不同的考虑。我们在那本蓝皮的《数据结构》当中学到的快速排序是一种 in-place quick sort。这个版本对空间复杂度做了优化,使得实现当中不需要占用额外的空间,空间复杂度为O(1)。不过,细节上我觉得,没必要设置两个变量i,j,然后从两头开始比较,因为这样和设置一个变量一样,都需要O(n)次比较。所以,我做了一些改变。

代码:

 

void qsort(char *listptr[], int left, int right){    int pivot = 0;    // First, partition operation    pivot = partition(lineptr, left, right);    if (left < pivot)    // recursively quick sort the former part if its length greater than 1        qsort(lineptr, left, pivot);    // recursively quick sort the latter part if its length greater than 1    if ((pivot+1) < right)        qsort(lineptr, pivot+1, right);}int partition(char *listptr[], int left, int right){    int pivot = left, i = left+1;    for (; i < right; i++)    {           if (listptr[i][0] < listptr[pivot][0]) {            swap(&listptr[i], &listptr[pivot]);            pivot = i;        }       }       return pivot;   }

 

 

转载地址:http://twlul.baihongyu.com/

你可能感兴趣的文章
QTP的那些事—WMI+SQL分析查询工具
查看>>
柯里化
查看>>
LeetCode - Nth Highest Salary
查看>>
海量数据面试题整理
查看>>
9.ORM数据访问
查看>>
第三次作业结对编程
查看>>
sublime使用
查看>>
一言不合就动手系列篇一-仿电商平台前端搜索插件(filterMore)
查看>>
Oracle Split 函数
查看>>
目标跟踪之卡尔曼滤波---理解Kalman滤波的使用预测
查看>>
Git安装和基本使用(1)
查看>>
Swoft 图片上传与处理
查看>>
BluetoothClass详解
查看>>
Centos 7安装Python3.6
查看>>
Django 学习笔记
查看>>
20172303 2017-2018-2 《程序设计与数据结构》实验三报告
查看>>
CSS自定义文件上传按钮
查看>>
排序算法概览(二)
查看>>
document对象获取例子
查看>>
java模拟http的get和post请求
查看>>