用C语言实现快速排序算法「建议收藏」

用C语言实现快速排序算法「建议收藏」一、快速排序算法(Quicksort)1.定义快速排序由C.A.R.Hoare在1962年提出。快速排序是对冒泡排序的一种改进,采用了一种分治的策略。2.基本思想通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。3….

大家好,又见面了,我是你们的朋友全栈君。

一、快速排序算法(Quicksort)

1. 定义

快速排序由C. A. R. Hoare在1962年提出。快速排序是对冒泡排序的一种改进,采用了一种分治的策略。

用C语言实现快速排序算法「建议收藏」

2. 基本思想

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

3. 步骤

a. 先从数列中取出一个数作为基准数。

b. 分区过程,将比这个数大的数全放到它的右边,小于或等于它的数全放到它的左边。

c. 再对左右区间重复第二步,直到各区间只有一个数。

二、C语言实现代码(仅供参考)

 

/*****************************************************
File name:Quicksort
Author:Zhengqijun    Version:1.0    Date: 2016/11/04
Description: 对数组进行快速排序
Funcion List: 实现快速排序算法
*****************************************************/

#include <stdio.h>
#include <stdlib.h>

#define BUF_SIZE 10

/**************************************************
 *函数名:display
 *作用:打印数组元素
 *参数:array - 打印的数组,maxlen - 数组元素个数
 *返回值:无
 **************************************************/
void display(int array[], int maxlen)
{
    int i;

    for(i = 0; i < maxlen; i++)
    {
        printf("%-3d", array[i]);
    }
    printf("\n");

    return ;
}

/************************************
 *函数名:QuickSort
 *作用:快速排序算法
 *参数:
 *返回值:无
 ************************************/
void QuickSort(int *arr, int low, int high)
{
    if (low < high)
    {
        int i = low;
        int j = high;
        int k = arr[low];
        while (i < j)
        {
            while(i < j && arr[j] >= k)     // 从右向左找第一个小于k的数
            {
                j--;
            }

            if(i < j)
            {
                arr[i++] = arr[j];
            }

            while(i < j && arr[i] < k)      // 从左向右找第一个大于等于k的数
            {
                i++;
            }

            if(i < j)
            {
                arr[j--] = arr[i];
            }
        }

        arr[i] = k;

        // 递归调用
        QuickSort(arr, low, i - 1);     // 排序k左边
        QuickSort(arr, i + 1, high);    // 排序k右边
    }
}

// 主函数
int main()
{
    int array[BUF_SIZE] = {12,85,25,16,34,23,49,95,17,61};
    int maxlen = BUF_SIZE;
    
    printf("排序前的数组\n");
    display(array, maxlen);
    
    QuickSort(array, 0, maxlen-1);  // 快速排序
    
    printf("排序后的数组\n");
    display(array, maxlen);
    
    return 0;
}

 

执行程序后的结果如下所示:

用C语言实现快速排序算法「建议收藏」

上诉代码结合了我自己对快速排序的看法和理解,仅供参考。

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/153027.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • java 特点_JAVA的几个重要特点[通俗易懂]

    java 特点_JAVA的几个重要特点[通俗易懂]展开全部一.简单性:Java是纯62616964757a686964616fe58685e5aeb931333433663063面向对象语言,语法简单明了,易于掌握。Java使用接口取代了多重继承,并且取消了指针,因为多重继承和指针会使程序变得复杂。Java还会自动地收集内存垃圾,使得内存管理变得更为简单。Java还提供了丰富的类库、API文档以及第三方开发包,还有大量Java的开源项目。二.面向…

  • 0817a

    0817ahttps://zhidao.baidu.com/question/1302230504869242619.html

  • Java Metric 入门详解

    Java Metric 入门详解翻译自:http://metrics.dropwizard.io/3.1.0/getting-started/    待完成……

  • Linux挂载磁盘(扩展根目录)

    Linux挂载磁盘(扩展根目录)1.df命令查看自己的/目录属于哪个逻辑卷(我们要做的是对逻辑卷扩展)[root@redhat6-3~]#df-h查看未挂载的磁盘:[root@redhat6-3~]#lsblk2.新加一块硬盘,我的是vdb先创建物理卷[root@redhat6-3~]#fdisk/dev/vdb在分别输入n、p、1、2048、1048575999、w如果报错,执行(类似刷新磁盘变化,如果磁盘无法格式化和无法创建物理卷):partprobe再执行:fdisk/dev/vdb

  • redis+springboot_redis部署

    redis+springboot_redis部署目录1、搭建环境2、测试Redis3、StringRedisTemplate3.1、介绍3.2、StringRedisTemplate常用操作3.3、StringRedisTemplate的使用4、RedisTemplate4.1、介绍4.2、RedisTemplate常用操作4.3、RedisTemplate的使用SpringBootData(数据)Redis中提供了RedisTemplate和StringRedisTemplate,其中StringRedisTemplate是RedisTem.

  • idea 2022 Mac 激活码【中文破解版】

    (idea 2022 Mac 激活码)这是一篇idea技术相关文章,由全栈君为大家提供,主要知识点是关于2021JetBrains全家桶永久激活码的内容IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.cn/100143.html4KDDGND3CI-eyJsaWN…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号