C语言之快速排序案例详解

 更新时间:2021年07月30日 08:43:44   作者:小尹同学⁣  
这篇文章主要介绍了C语言之快速排序案例详解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下

快速排序:是对冒泡排序算法的一种改进。

它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。

例如有一个数字序列: 5 0 1 6 8 2 3 4 9 7
对其进行快速排序变为:0 1 2 3 4 5 6 7 8 9

思路如下:首先将要排序的序列的首个数字5定位比较数,这是一个参考对象!

然后的方法很简单:分别从序列的两端进行比较。先从右边往左边找比5小的数,再从左边往右边找大于5的数。当他们找到以后就需要停下来,然后交换它们。
在这里我们为了方便,将i定为左边,j为右边。

在这里插入图片描述

在这里插入图片描述

接下来继续前进,还是先从右边。
接下来得到的序列如下:
5 0 1 4 3 2 8 6 9 7

当它继续下去的时候我们可以知道这时,i,j相遇了。

这个时候,直接将比较数与相遇的数进行交换

得到如下序列:2 0 1 4 3 5 8 6 9 7

可以看出,在右边的数都比比较数5大,左边的数都比比较数5小。

这个时候其实就是第一轮排序结束了。

下面的排序就是将左边与右边分别看成两个序列,然后与上面的一样进行排序。这里其实就是应用到了递归!

完整代码如下:

#include<stdio.h>
int a[100];//这里将数组a定义为全局变量,方便后面使用
void kspx(int left,int right)
{
    int i,j;
    int t,bjs;//bjs就是指开头的比较数
    if(left>right)
        return;
    bjs=a[left];
    i=left;
    j=right;
    while(i!=j)
    {
        while (a[j]>=bjs&&i<j)//这里是从右往左走
            j--;
        while(a[i]<=bjs&&i<j)//这里是从左往右走
            i++;
        if(i<j)//当i,j还没有相遇的时候
        {
            t=a[i];
            a[i]=a[j];
            a[j]=t;
        }
    }
    a[left]=a[i];//将比较数换到i,j相遇的位置
    a[i]=bjs;
    kspx(left,i-1);//下面使用递归进行下面的排序
    kspx(i+1,right);//使其排好
}
int main()
{
    int i,j;
    int n;
    scanf("%d",&n);//首序列长度
    for(i=1;i<=n;i++)
    scanf("%d",&a[i]);
    kspx(1,n);//快速排序函数
    for(i=1;i<=n;i++)//验证结果
        printf("%d ",a[i]);
    return 0;
}

结果如下:

在这里插入图片描述

总结:快速排序的优点是速度快,缺点是不稳定。

到此这篇关于C语言之快速排序案例详解的文章就介绍到这了,更多相关C语言之快速排序内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 显示任何进程加载的DLL文件的代码

    显示任何进程加载的DLL文件的代码

    c语言实现的显示任何进程加载的DLL,方便开发软件的朋友
    2013-05-05
  • C++版图书管理系统

    C++版图书管理系统

    这篇文章主要为大家详细介绍了C++版图书管理系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-03-03
  • C++空指针void*的使用方法

    C++空指针void*的使用方法

    C++空指针void是一种通用指针类型,可以指向任何类型的数据或对象。它不关心指向的数据或对象的类型,只关心指针本身的地址,在使用void指针时,需要将其转换为特定类型的指针,以便对其进行操作或访问其值,本文就给大家介绍一下C++空指针void的使用方法
    2023-06-06
  • 浅谈C语言中的指针和数组有什么区别

    浅谈C语言中的指针和数组有什么区别

    C语言中的指针和数组是两个重要的数据结构,它们在内存管理和数据存储方面有许多相似之处,但也存在一些关键的区别,本文就来介绍一下C语言中的指针和数组有什么区别,具有一定的参考价值,感兴趣的可以了解一下
    2023-09-09
  • C++实现词法分析器

    C++实现词法分析器

    这篇文章主要为大家详细介绍了C++实现词法分析器的相关代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-01-01
  • cocos2dx-3.10 C++实现滚动数字

    cocos2dx-3.10 C++实现滚动数字

    这篇文章主要为大家详细介绍了cocos2dx-3.10 C++实现滚动数字效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-09-09
  • 一篇文章带你了解C语言操作符

    一篇文章带你了解C语言操作符

    这篇文章主要以图文结合的方式为大家详细介绍了C语言操作符基础知识,感兴趣的小伙伴们可以参考一下,希望能给你带来帮助
    2021-09-09
  • 输入一个字符串,取出其中的整数(实现代码)

    输入一个字符串,取出其中的整数(实现代码)

    输入一个字符串,内含所有数字和非数字字符。将其中连续的数字作为一个整数,依次存放到一个数组中,统计共有多少个整数,并输出这些数
    2013-09-09
  • 带你了解C++中的sort函数

    带你了解C++中的sort函数

    这篇文章主要给大家介绍了关于C++中sort函数的基础入门使用的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用C++具有一定的参考学习价值,需要的朋友们下面来一起看看吧
    2021-08-08
  • C/C++实现HTTP协议解析的示例代码

    C/C++实现HTTP协议解析的示例代码

    基本上,HTTP 是一种基于 TCP/IP 的通信协议,用于通过 Web 传递 HTML 文件、图像文件、查询结果等数据。本文将用C/C++实现HTTP协议解析,感兴趣的可以了解一下
    2022-07-07

最新评论