c语言快速排序算法总结(详解)

快速排序是一种分治算法,其基本原理如下:

  1. 选择一个基准元素(pivot),通常选择序列中的第一个元素。
  2. 将序列分为两部分,使得左边部分的元素都小于等于基准元素,右边部分的元素都大于基准元素。这个过程称为分区(partition)操作。
  3. 对左右两部分分别递归地应用快速排序算法。
  4. 当左右两部分都排序完毕后,整个序列就变得有序。

具体实现时,快速排序的分区操作可以采用多种方法,常见的是使用双指针或者挖坑填数的方式进行分区。在实际应用中,为了提高排序的稳定性,通常会对小规模子序列采用其他排序算法,例如插入排序。快速排序的时间复杂度通常为O(nlogn),在最坏情况下为O(n^2)。快速排序是一种不稳定的排序算法,因为在分区操作中可能会改变相同元素的相对顺序。快速排序在实际应用中广泛使用,因为它在平均情况下具有较好的性能,并且可以采用原地排序的方式,节省了额外的空间开销。
在这里插入图片描述递归结束的条件是I < J

快速排序代码截图

在这里插入图片描述快速排序代码实现

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <iostream>
#include <string.h>
#include <time.h>
#include <sys/timeb.h>

#define MAX 10
using namespace std;

// 打印函数
void PrintArray(int arr[], int length) {
   
    for (int i = 0; i < length; i++) {
   
        cout << arr[i] << " ";

    }
    cout << endl;

}
// 快速排序的实现,从小到大
void QuickSort(int arr[],int start, int end) {
   
    // 
    int i = start;
    int j = end;
    // 基准数所有的数都和他进行比较
    int temp = arr[start];

    if (i < j) {
   
    
        while (i < j) {
   
            while (i < j && arr[j] >= temp) {
   
                //从右向左找符合条件的
                j--;
    
            }
            // 填充数据
            if (i < j) {
   
                arr[i] = arr[j];
                i++;
            }
            // 从左向右找比基准数更大的数
            while (i < j && arr[i] < temp) {
   
                i++;
            }
            // 填坑
            if (i < j) {
   
                arr[j] = arr[i];
                j--;
            }
        }
        // 把基准数放到i的位置或者是j的位置
        arr[i] = temp;
        // 对基准数的左半部分进行快速排序
        QuickSort(arr, start, i - 1);
        // 对基准数的右半部分进行快速排序
        QuickSort(arr, i + 1, end);
    }

}

int main(void)
{
   
    int myArr[] = {
    4,2,8,0,5,7,1,3,9 };
    int len = sizeof(myArr) / sizeof(myArr[0]);
    PrintArray(myArr, len);
    QuickSort(myArr,0,len - 1);
    PrintArray(myArr, len);


    return 0;

}

快速排序运行结果展示

在这里插入图片描述

相关推荐

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

    2023-12-10 02:12:02       13 阅读
  2. 快速排序--C语言

    2023-12-10 02:12:02       21 阅读
  3. C语言经典算法快速排序算法

    2023-12-10 02:12:02       28 阅读

最近更新

  1. TCP协议是安全的吗?

    2023-12-10 02:12:02       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2023-12-10 02:12:02       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2023-12-10 02:12:02       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2023-12-10 02:12:02       20 阅读

热门阅读

  1. MySQL - 存储过程与事务

    2023-12-10 02:12:02       44 阅读
  2. vue获取主机id和IP地址

    2023-12-10 02:12:02       34 阅读
  3. Kotlin 中密封类、枚举类与密封接口的对比分析

    2023-12-10 02:12:02       38 阅读
  4. 昇腾npu上构建modelbox webUI开发容器教程

    2023-12-10 02:12:02       46 阅读
  5. LightDB to_char 三入参函数支持

    2023-12-10 02:12:02       38 阅读
  6. 固定区间存在重复元素算法(leetcode第219题)

    2023-12-10 02:12:02       39 阅读
  7. qt treeview 控制节点收缩

    2023-12-10 02:12:02       40 阅读
  8. 【Python】 Python 中实现单例模式?

    2023-12-10 02:12:02       35 阅读
  9. Android 使用aapt工具获取apk信息

    2023-12-10 02:12:02       39 阅读
  10. 工业IC是什么

    2023-12-10 02:12:02       38 阅读
  11. 文件服务器搭建

    2023-12-10 02:12:02       38 阅读