数据结构-快速排序-散装C语言

快速排序

  1. 分而自治的思想,将数据分为两部分,一部分为大于基准值,一部分小于基准值。
  2. 通过递归的方式,调用排序算法,小于部分在左边,大于部分在右边。
  3. 左右边的数据,单独再排序,先拍完左边数据后右边数据。

图解

部分运行 流程
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
首次递归将数组分为大于和小于4的两部分,然后在左右分别递归排序。

附上代码

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

void show_sort(int arr[], int low, int high)
{
    for (int i=low; i <= high; i++)
    {
        printf("%d ", arr[i]);
    }
    printf("\n");
}

int get_middle(int arr[], int low, int high)
{
    int temp = arr[low]; // 将当前组的 首位值 作为基准值
    while (low < high)
    {
        while (low < high && temp <= arr[high])
        {
            high--; // 从右向左 找到比 基准值小的值
        }
        arr[low] = arr[high]; // 放到到左边
        while (low < high && temp >= arr[low]) 
        {
            low++; // 从左向右 找到比 基准值大的值
        }
        arr[high] = arr[low]; // 放到右边
    }
    arr[low] = temp; // 恢复 基准值
    return low; // 返回基准值的位置 
}


void quick_sort(int arr[], int low, int high)
{   
    if (low < high)
    {
        int middle = get_middle(arr, low, high); // 获得基准值
        quick_sort(arr, low, middle - 1); // 小于基准值的递归调用
        quick_sort(arr, middle + 1, high); // 大于基准值的递归调用
    }
}


int main()
{
    int arr[10] = {4,5,2,7,1,8,3,9,0,6};
    printf("初始化数据:\n");
    show_sort(arr, 0, 9);

    quick_sort(arr, 0 , 10-1);

    printf("完成排序:\n");
    show_sort(arr, 0, 9);
    return 0;
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值