快排作为公认最优秀的排序方法,是每一个程序员都应该掌握的,那么,今天就由我来为大家简单讲解一下快速排序算法的代码。

源代码如下:

#include<stdio.h>
void quicksort(int *a,int left,int right)
{
    if(left>right)
    {
        return ;
    }
    int i=left;
    int j=right;
    int key=a[left];
    while(i!=j)
    {
        while(a[j]>=a[left]&&i<j)
        {
            j--;
        }
        while(a[i]<=a[left]&&i<j)
        {
            i++;
        }
        int s;
        s=a[i];
        a[i]=a[j];
        a[j]=s;
    }
    a[left]=a[i];
    a[i]=key;
    quicksort(a,left,i-1);
    quicksort(a,i+1,right);
}
int main(void)
{
    int a[10]={6,7,8,9,10,5,3,2,4,1,};
    quicksort(a,0,9);
    int i;
    for(i=0;i<10;i++)
    {
        printf("%d ",a[i]);
    }    
}

以下是程序输出图

下面是对于代码的讲解:

先简单讲解一下快速排序的原理,核心思想是递归。在一组数据中,我们先随机找一个数字(本程序中是最左边的数字也就是a[0])然后再利用两个指针i,j从数据二头向中间逼近,我们命名为left和right。left指向最左边,right指向最右边。当i变量找到一个值,这个值大于我们的标识值时,我们就把这个i记录下来,同理,我们再记录一个小于标识值的j,将a[i]与a[j]交换位置,直到i=j;

这是,我们将一开始的标识符与这是的a[i]交换位置,初步的快排就做好了,请注意,我们这里有一个陷阱!我现在这里卖一个关子

接着利用递归的思想,在标识符左右两端分别进行快排,直到我们的这个left=right为止。

在函数的最开头,表现出来一种渴望,在子程序的递归中,一旦left>right了,nice!quicksort滴任务完成啦,直接return。

确定标识值和copy一下left与right的值,方便下面操作

在i!=j这个大背景下,由于经过我们这个初步的快排之后,标识值左边的数统统小于标识值,标识值右边的数统统大于标识值,所以我们现在就开始找内鬼,有劳i与j了,j由于代表的是right,那么就要把小于标识值的抓到左边去,同理,i把大于标识值的送去右边。两者交换位置。

WARNING

还记得我刚刚卖的关子吗,我们程序的思路是将标识值与i与j值相等的那个数换位置,如果

我们这样进行,先找到左边的,在找到右边的,那么由于第一个循环先结束,i仍然小于j但是我们的这个值a[i]是大于a[left](不满足循环的条件)所以当我们进行交换这一步时,出现了错误,本来标识符左边的值应该统统小于它的,但是来了个内鬼(新换过去的)他的值大于标识值,所以程序出现了错误!

因此,为了避免此类错误,我们应该

快排从右边开始!!!!!

交换位置,完成了初步快排

进行递归,对标识符左边的元素和右边的元素分别在进行快排,直到i=j

程序结束

:)

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

  1. Go语言编程:Go语言实现快速排序算法

    前言 今天用Go语言实现下经典排序算法--快速排序算法.主要是学习了Go语言,得用它来干点事情嘛,就用快速排序来练手.在Go语言语法方面,主要用到 切片数组,for循环(Go语言没有while循环), ...

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

    一.快速排序算法(Quicksort) 1. 定义 快速排序由C. A. R. Hoare在1962年提出.快速排序是对冒泡排序的一种改进,采用了一种分治的策略. 2. 基本思想 通过一趟排序将要排序 ...

  3. 快速排序算法-c语言实现,快速排序算法实现(C语言)(转)

    快速排序算法 的基本思想是:将所要进行排序的数分为左右两个部分,其中一部分的所有数据都比另外一 部分的数据小,然后将所分得的两部分数据进行同样的划分,重复执行以上的划分操作,直 到所有要进行排序的数据 ...

  4. 数据结构——C语言实现快速排序算法

    1.基本思想 先从数列中选取一个数为基准数:        把所有大于基准数的数放在基准数的右边,小于基准数的放在左边:        对上面的数列以上个基准数为轴,分别对左右两个数列再次递归调用函数 ...

  5. 【经典题】跟着凡人玩转C语言之快速排序算法

  6. java开发C语言编译器:把C实现的快速排序算法编译成jvm字节码

    有了前面一系列的铺垫和准备后,我们终于能走到至关重要的一刻.在本节,我们将用C语言开发快速排序算法,然后利用我们的编译器把它编译成java字节码,让C语言编写的快速排序算法能在java虚拟机上顺利执行 ...

  7. c语言实现快速排序函数

    c语言实现快速排序 众所周知,快速排序在排序算法中时间复杂度较为低,为O(nlogn),而选择,冒泡等排序的时间复杂度均为O(n^2). 所以,现在我们来用c语言实现快速排序算法. 代码如下: #in ...

  8. 快速排序算法 ( 挖坑法 ) ------- C语言

    快速排序: 快速排序,在众多排序算法中有不可或缺的地位. 光听名字就知道,快速排序的时间复杂度应该是要优于其他算法的. 今天这篇博客将和大家一起学习快速排序算法的其中一种实现方法  >>  ...

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

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

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

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

最新文章

  1. C# ASP.Net 设置外网访问
  2. 【集训心得】在真哥强迫下不得不写的总结
  3. js技巧笔记(不断更新)
  4. c#连接mysql数据库,增删查改命令执行
  5. 五分钟教会如何计算CAN总线负载率,包学包会
  6. 大泡沫.一切从广场协议开始 俞天任 读后总结
  7. 自建公众号服务器开发教程,01-微信公众号开发入门篇
  8. VR,“看房”容易“卖房”难
  9. Xposed FrameWork v89 安装
  10. 客服在线咨询工具|即时聊天客服系统下载安装(包含APP)
  11. 巴菲特致股东的一封信:2001年
  12. 应用性能管理APM巅峰对决:skywalking P.K. Pinpoint
  13. MySQL中json_extract()函数的用法实例
  14. html 中圆角怎么写,html中的圆角
  15. 李建忠设计模式(二)
  16. python内置函数 blool()
  17. 目前最完美的Windows Server 2008企业版激活方法
  18. DDPG中的Ornstein-Uhlenbeck过程怎么理解
  19. 阿里云学生服务器专注于学生搭建个人博客
  20. 2022年无形资产估值工具和方法研究报告

热门文章

  1. DataCastle[猜你喜欢]赛事算法分享
  2. 顶级期刊Nature、Science,如何一较高下?
  3. 【提升笔记本续航】WIN10笔记本打开电源选项中的处理器电源管理
  4. 机械工程c语言第一学期考试题,科学出版社机械工程图学习题集1~10章答案.ppt
  5. 渗透测试之信息收集(下篇)
  6. JSP实战项目教程|基于JSP的学生请假系统开发视频教程
  7. python 管理windows客户端_Python管理Windows进程
  8. 使用JConsole观察分析Java程序的运行(转)
  9. 组件上传之AspUpload使用方法
  10. 网络管理员面试时常用的问题及答案