• 快速排序(c语言代码实现)


    交换排序:快速排序(不稳定的排序)

    快速排序(Quick Sort)是一种常见的排序算法,它采用分治法的思想,对待排序序列进行划分,使得划分出的子序列可以分别进行排序,最终使整个序列有序。快速排序的最好情况下的时间复杂度为:O(nlogn),最坏时间复杂度:O(n^2),是一种高效的排序算法。快速排序是所有内部排序算法中平均性能最优的排序算法

    快速排序的具体实现:

    1. 选择一个基准元素,一般选择第一个元素作为基准元素;
    2. 将序列分为两部分,一部分是所有比基准元素小的元素,另一部分是所有比基准元素大的元素;
    3. 对两个子序列进行递归排序,直到子序列长度为1,排序完成。

    代码如下

    1. int part(int arr[], int low, int high)
    2. {
    3. int pivot = arr[low];//将当前表中的第一个元素设为枢轴,对表进行划分
    4. while (low < high)//循环跳出条件
    5. {
    6. while (low < high && arr[high] >= pivot)
    7. --high;
    8. arr[low] = arr[high];//将比枢轴小的元素移动到左端
    9. while (low < high && arr[low] <= pivot)
    10. ++low;
    11. arr[high] = arr[low];//将比枢轴大的元素移动到右端
    12. }
    13. arr[low] = pivot;//枢轴元素存放到最终位置
    14. return low;//返回存放枢轴的最终位置
    15. }
    16. void quicksort(int arr[], int low, int high)
    17. {
    18. if (low < high)
    19. {
    20. int pivot = part(arr, low, high);
    21. quicksort(arr, low, pivot-1);//依次对两个子表进行递归排序
    22. quicksort(arr, pivot+1, high);
    23. }
    24. }

    完整测试代码

    1. #include<stdio.h>
    2. int part(int arr[], int low, int high)
    3. {
    4. int pivot = arr[low];//将当前表中的第一个元素设为枢轴,对表进行划分
    5. while (low < high)//循环跳出条件
    6. {
    7. while (low < high && arr[high] >= pivot)
    8. --high;
    9. arr[low] = arr[high];//将比枢轴小的元素移动到左端
    10. while (low < high && arr[low] <= pivot)
    11. ++low;
    12. arr[high] = arr[low];//将比枢轴大的元素移动到右端
    13. }
    14. arr[low] = pivot;//枢轴元素存放到最终位置
    15. return low;//返回存放枢轴的最终位置
    16. }
    17. void quicksort(int arr[], int low, int high)
    18. {
    19. if (low < high)
    20. {
    21. int pivot = part(arr, low, high);
    22. quicksort(arr, low, pivot-1);//依次对两个子表进行递归排序
    23. quicksort(arr, pivot+1, high);
    24. }
    25. }
    26. int main()
    27. {
    28. int i = 0;
    29. int arr[7] = { 49,38,65,98,76,13,27 };
    30. int sz = sizeof(arr) / sizeof(arr[0]);
    31. printf("原始数组为:");
    32. for (i = 0; i < sz; i++)
    33. {
    34. printf("%d ", arr[i]);
    35. }
    36. quicksort(arr, 0, sz - 1);
    37. printf("\n快速排序之后的数组为:");
    38. for (i = 0; i < sz; i++)
    39. {
    40. printf("%d ", arr[i]);
    41. }
    42. return 0;
    43. }

  • 相关阅读:
    mysql 安装使用
    真香!阿里最新公开的200页Spring全家桶进阶指南及视频汇总
    基于开源模型搭建实时人脸识别系统(四):人脸质量
    【jvm源码】-2.对象核心源码
    内核实战教程第1期|数据库系统概述,带你走近 OceanBase 研发环境!
    【电源设计】11变压器在开关电源中的应用
    STM32 大小端与字节对齐使用记录
    CF1648B Integral Array
    最长连续子序列
    算法系列-链表操作总结
  • 原文地址:https://blog.csdn.net/m0_46702681/article/details/134044219