快速排序方法对整数序列操作的一种C语言实现

目标

给定一个长度为n的整数序列,将序列从小到大进行排序

原理

  1. 从序列中任选一个值,将原有序列划分为两个子序列,其中,左侧序列中的值均小于该选出的值,右侧序列中的值均大于或者等于该选中的值,该值位于两个子序列交界(既不属于左侧、也不属于右侧);
  2. 分别对左侧、右侧的子序列用同样的方法进行排序;
  3. 将两个子序列以及中心位置的值进行合并,获得最终排序后的结果。

实现

#include <stdio.h>/*** 将输入序列划分为两个子序列,并返回中间位置的下标* * @param arr 输入划分的输入序列* @param left 需要划分序列的最左侧元素下标* @param right 需要划分序列的最右侧位置下标* @return 找到的中心位置坐标*/
int partition(int arr[], int left, int right) {int j = left, i;int selectedValue = arr[right];int temp;// 用j指定预期的中心点位置// 用游标i从左向右遍历,如果小于选定值,则扔到j指定位置的左侧,否则继续向右for (i = left; i < right; i++) {if (arr[i] < selectedValue) {// 交换i与j位置的值,并更新j指向的位置temp = arr[i];arr[i] = arr[j];arr[j] = temp;j++;}}arr[right] = arr[j];arr[j] = selectedValue;return j;
}/*** 对输入序列进行快速排序** @param arr 待排序数组* @param left 需要排列位置的最左侧元素下标* @param right 需要排序位置的最右侧位置下标*/
void quickSort(int arr[], int left, int right) {int q;if (left < right) {q = partition(arr, left, right);quickSort(arr, left, q - 1);quickSort(arr, q + 1, right);}
}int main() {int i = 0;int a[15] = { 3, 4, 53, 4, 5, 3, 4, 5, 6, 2, 37, -3,-33, 5, 3 };quickSort(a, 0, 14);// 输出for (i = 0; i < 15; i++) {printf("%d ", a[i]);}return 0;
}

运行结果

-33 -3 2 3 3 3 4 4 4 5 5 5 6 37 53

分析

  1. 因为代码中直接在序列原有位置进行排序,所以,可以直接省掉原理第3条中的合并步骤;
  2. 在进行划分时,可以有很多方法找到中间位置,例如从两侧往中间找,分别找到一个大于选定值和一个小于选定值的,进行交换。在本实现中,则从一侧开始找,并用两个下标进行辅助标志预期的中心位置。
  3. 在快速排序方法中,在理想情况下,应该每次都能成功把序列划分成两个长度相等的子序列,此时,其时间复杂度为O(nlogn),而在极端情况下,则每次划分都找到了端点位置,此时,快速排序的时间复杂度将降为O(n^2)

快速排序的C语言实现相关推荐

  1. 快速排序及C语言实现

    排序系列之(3)快速排序及C语言实现 收藏 快速排序(Quicksort)是对冒泡排序的一种改进.由C. A. R. Hoare在1962年提出.它的基本思想是:通过一趟排序将要排序的数据分割成独立的 ...

  2. 快速排序算法C语言实现

    快速排序算法C语言实现 在任何程序中,数组的排序都是极为重要的内容,我们需要按照业务需要对大量的数据进行排序,因此排序的速度或者说效率就显得极为重要了,因此选择一个效率较高的算法可以大大提升程序的性能 ...

  3. 快速排序实验报告 c语言,快速排序算法c语言实验报告.docx

    快速排序算法c语言实验报告 实验六:冒泡法排序 物理学416班赵增月F12XX日期:XX年10月31日 一·实验目的1.熟练掌握程序编写步骤: 2.学习使用冒泡法和选择法排序: 3.熟练掌握数组的定义 ...

  4. 随机快速排序算法(C语言)

    随机快速排序(C语言) 分治法基本思想 将一个规模为n的问题分解为k个规模较小的子问题,这些子问题互相独立且与原问题相同.递归的解决这些子问题,然后将各个子问题的解合并得到原问题的解. 快速排序 原链 ...

  5. c语言快速排序案例,什么是快速排序?C语言数组快速排序例子

    快速排序(Quick Sort)是一种有效的排序算法.虽然算法在最坏的情况下运行时间为O(n^2),但由于平均运行时间为O(nlogn),并且在内存使用.程序实现复杂性上表现优秀,尤其是对快速排序算法 ...

  6. 快速排序c语言实现,快速排序的C语言代码实现

    快速排序实质上是对"冒泡排序"的一种改进,整个排序过程可概括为:通过N趟的排序将原本的排序数据分为若干块进行分块排序,而在每趟排序过程中,以指定的关键字将待排数据分别分为比关键字大 ...

  7. 快速排序算法 c语言实现

    快速排序是一种分治算法,它将一个数组分成两个子数组,将两个子数组分别排序,最终使得整个数组有序. 下面是一个 C 语言实现的快速排序算法: void quick_sort(int *arr, int ...

  8. 快速排序【C语言数据结构】

    目录 一.快速排序的基础实现 1.经典写法 2.挖坑法 3.前后指针法 二.快速排序第二部分的写法 三.优化我们基准值的选取 四.快速排序的非递归写法 五.代码的汇总 六.测试代码 快速排序,顾名思义 ...

  9. 算法学习之快速排序的C语言实现

    近几天在学习简单算法,今天看了一个快速排序和堆排序,堆排序还没搞懂,还是先把快速排序搞清楚吧 教程网上一艘一大堆,这里选择一个讲的比较通俗的的一个吧: http://blog.csdn.net/mor ...

  10. 算法—快速排序Sqrt (C语言)

    /* 快速排序 */ #include"stdio.h" #include"stdlib.h" int compare(const void* a,const ...

最新文章

  1. JqGridView 1.0.0.0发布
  2. OpenGL ES3 0实现简单粒子火焰效果
  3. 以get方式传递json字符串问题。
  4. [原创]java WEB学习笔记02:javaWeb开发的目录结构
  5. OEL7.2下Oracle11.2.0.4RAC部署
  6. 《gcc五分钟系列》第六节:编译期符号检查
  7. 采购的业务处理流程之 现购
  8. java在虚拟机下的安装_centos 虚拟机下安装 Java方法
  9. 如何监视Java EE数据源
  10. 库克发文纪念苹果成立45周年:伟大使命还有待实现
  11. Python合并多幅静图为GIF动图
  12. 整理了一些面试题,还在更新中,有时间的可以看看
  13. 今天入手了二手X61
  14. DevOps使用教程 华为云(6)文档报告 项目进度 会议记录 迭代评审
  15. 电子科学与技术毕业论文题目【452个】
  16. 常微分方程的近似计算和误差估计(2)
  17. 昨日美股:美联储不再降息,苹果再创历史新高
  18. python中三角函数运算符_Python入门之三角函数sin()函数实例详解
  19. 链家爬虫python_python爬虫-链家租房信息获取
  20. 测试学习--云测试平台

热门文章

  1. BUUCTF:sqltest
  2. Dennis M. Ritchie(丹尼斯里奇)
  3. selenium模拟登录QQ空间
  4. 关于Solidworks启动和office的VBA干涉解决方法
  5. dlna android电视,DLNA推送安卓手机投屏电视
  6. 《SAFe 4.0参考指南:精益软件与系统工程的规模化敏捷框架》SAFe基础
  7. sendmail 邮件服务器 套件,SENDMAIL邮件服务器的安装与设置
  8. 隐藏“WPS Office云文档”在我的电脑中显示的快捷入口
  9. dqw3721:自己动手写打印机监控程序
  10. [ASP调试]小旋风Web服务器使用