美文网首页
C语言:十种排序(六) - 快速排序

C语言:十种排序(六) - 快速排序

作者: lzp1234 | 来源:发表于2019-08-09 15:43 被阅读0次

前言

一种将无序数组进行排序的方法。

快速排序,参杂了冒泡排序的交换思想。

wiki参考:
https://zh.wikipedia.org/wiki/%E5%BF%AB%E9%80%9F%E6%8E%92%E5%BA%8F

本文只提及了递归方式的实现,该算法整体类似于二叉树,普通的迭代方法反而更加复杂。

环境

编辑器:vs2019
文件:.c类型

正文

代码参考:

#include <stdio.h>

// 快速排序,主要思想:1. 取基值。2. 分割(基值左小右大)

void swap(int* x, int* y) {
    int t = *x;
    *x = *y;
    *y = t;
}


// start: 起始索引
// end: 结束索引
void quick_sort_recursive(int source_array[], int start, int end)
{
    if (start >= end)
    {
        return 0;
    }

    // 取基值
    // source_array[end];

    // 确定分割数组的索引
    int left = start;
    int right = end - 1;

    // 开始分割
    while (left < right)
    {
        // 从左向右找到比基值大的数
        while (source_array[left] < source_array[end])
        {
            left++;
        }

        // 从右向左找到比基值小的数
        while (source_array[right] > source_array[end])
        {
            right--;
        }

        // 交换两个元素
        if (left < right)
        {
            swap(&source_array[left], &source_array[right]);
            left++;
            right--;
        }

    }
    // 最后移动基值。循环结束以后,left指向 从左向右,第一个大于等于基值的值
    if (left < end)
    {
        swap(&source_array[left], &source_array[end]);
    }

    quick_sort_recursive(source_array, start, left - 1);
    quick_sort_recursive(source_array, left + 1, end);
}


int main()
{
    // 生成随机测试列表
    int test_list[30];
    int test_list_length = sizeof(test_list) / sizeof(int);
    printf("测试列表: \n");
    for (int i = 0; i < test_list_length; i++)
    {
        test_list[i] = rand() % 100;
        printf("%d ", test_list[i]);
    }
    printf("\n");


    // 递归快速排序
    quick_sort_recursive(test_list, 0, test_list_length - 1);
    printf("递归快速排序结果: \n");
    for (int i = 0; i < test_list_length; i++)
    {
        printf("%d ", test_list[i]);
    }
    printf("\n");

    return 0;
}

执行结果参考:


image.png

相关文章

  • C语言:十种排序(六) - 快速排序

    前言 一种将无序数组进行排序的方法。 快速排序,参杂了冒泡排序的交换思想。 wiki参考:https://zh.w...

  • 1.2-交换排序-快速排序

    参考链接 交换排序:快速排序(Quick Sort) 白话经典算法系列之六 快速排序 快速搞定 快速排序是C.R....

  • DAY5C语言知识整理4(数组排序)+杀人游戏(约瑟夫环)+猜数

    c语言知识整理4 排序 分类 快速排序、希尔排序、堆排序、直接选择排序不是稳定的排序算法,而基数排序、冒泡排序、直...

  • C语言中的指针与数组

    C语言中的指针与数组 @(C语言)[排序算法, 快速排序, C实现] 引言 相信指针与数组是不少同学在初学C语言时...

  • 七种常见的数组排序算法整理(C语言版本)

    ~~~C语言版本~~~ 冒泡排序 选择排序 直接插入排序 二分插入排序 希尔排序 快速排序 堆排序 排序算法是否稳...

  • 排序算法

    快速排序:顾名思义就是快,c语言底层实现的排序算法主要就是用的快速排序。快速排序,最好时间复杂度是nlogn,最坏...

  • 常见十大排序算法概述

    排序算法概述 网上常见的排序算法有十种:冒泡排序、快速排序、插入排序、希尔排序、选择排序、堆排序、归并排序、计数排...

  • 数据结构02-高效排序算法

    第二章 高效排序算法 第二章 高效排序算法一、快速排序基本思想快速排序图示一次划分C 语言实现Java 语言实现算...

  • 七大排序算法之快速排序

    七大排序算法之快速排序 @(算法笔记)[排序算法, 快速排序, C++实现] [TOC] 快速排序的介绍: 快速排...

  • 排序算法的小结

    这里将列举知名度较高的十种算法,附上自己的理解和代码。 冒泡排序 选择排序 插入排序 希尔排序 归并排序 快速排序...

网友评论

      本文标题:C语言:十种排序(六) - 快速排序

      本文链接:https://www.haomeiwen.com/subject/osbtjctx.html