数据结构---实现给定数组的快速排序

简介: 数据结构---实现给定数组的快速排序

实现给定数组的快速排序

题目描述

内容要求:

  1. 以菜单的形式作为用户界面,接收待排序的输入序列,使用快速排序的方法对输入序列进行快速排序。
  2. 测试数据:
    80,43,18,21,30,13,52,51,75

题目分析

快速排序是通过递归或非递归实现的,其中对于单趟PartSort也有三种不同的算法,这三种不同的算法效率没有差异,通常是通过递归实现快速排序,非递归需要借助栈或队列,这里展示的是递归版、前后指针法实现快速排序,如果有其他需求可以看此文章自行寻找所需算法

数据结构---手撕图解排序(含动图演示)

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

void PrintArrey(int* a, int n)
{
   
    for (int i = 0; i < n; i++)
    {
   
        printf("%d ", a[i]);
    }
    printf("\n");
}

void Swap(int* a, int* b)
{
   
    int tmp = *a;
    *a = *b;
    *b = tmp;
}

int PartSort(int* a, int left, int right)
{
   
    int cur = left + 1;
    int prev = left;
    int keyi = left;
    while (cur <= right)
    {
   
        if (a[cur] < a[keyi])
        {
   
            ++prev;
            Swap(&a[prev], &a[cur]);
        }
        cur++;
    }

    Swap(&a[prev], &a[keyi]);

    return prev;
}


void QuickSort(int* a, int begin, int end)
{
   
    if (begin >= end)
    {
   
        return;
    }
    int keyi = PartSort(a, begin, end);

    QuickSort(a, begin, keyi - 1);
    QuickSort(a, keyi + 1, end);
}

void menu()
{
   
    printf("*****************************\n");
    printf("********* 1. Sort **********\n");
    printf("********* 0. exit  **********\n");
    printf("*****************************\n");
}

void CheckCapacity(int* a, int num, int* capacity)
{
   
    if (num > *capacity)
    {
   
        int* tmp = (int*)realloc(a, sizeof(int) * num);
        if (tmp == NULL)
        {
   
            perror("realloc fail");
            return;
        }
        a = tmp;
        *capacity = num;
    }
    else
    {
   
        return;
    }
}

void Sort()
{
   
    int capacity = 10;
    int* a = (int*)malloc(sizeof(int) * capacity);
    if (a == NULL)
    {
   
        perror("malloc fail");
        return;
    }
    int num;
    printf("输入要输入元素的个数->");
    scanf("%d", &num);
    CheckCapacity(a, num, &capacity);
    printf("输入对应个数的元素->");
    for (int i = 0; i < num; i++)
    {
   
        scanf("%d", &a[i]);
    }
    QuickSort(a, 0, num - 1);
    printf("排序完成:\n");
    PrintArrey(a, num);
    free(a);
    a = NULL;
}

int main()
{
   
    int input = 0;
    do
    {
   
        menu();
        scanf("%d", &input);
        switch (input)
        {
   
        case 1:
            Sort();
            break;
        case 0:
            break;
        default:
            printf("输入错误 重新输入\n");
        }
    } while (input);
}
相关文章
|
2月前
|
存储 Java 程序员
数据结构之 - 深入了解数组数据结构
数据结构之 - 深入了解数组数据结构
48 6
|
2月前
|
存储 算法 搜索推荐
探索常见数据结构:数组、链表、栈、队列、树和图
探索常见数据结构:数组、链表、栈、队列、树和图
124 64
|
28天前
|
存储 缓存 算法
在C语言中,数据结构是构建高效程序的基石。本文探讨了数组、链表、栈、队列、树和图等常见数据结构的特点、应用及实现方式
在C语言中,数据结构是构建高效程序的基石。本文探讨了数组、链表、栈、队列、树和图等常见数据结构的特点、应用及实现方式,强调了合理选择数据结构的重要性,并通过案例分析展示了其在实际项目中的应用,旨在帮助读者提升编程能力。
54 5
|
1月前
|
存储 人工智能 算法
数据结构实验之C 语言的函数数组指针结构体知识
本实验旨在复习C语言中的函数、数组、指针、结构体与共用体等核心概念,并通过具体编程任务加深理解。任务包括输出100以内所有素数、逆序排列一维数组、查找二维数组中的鞍点、利用指针输出二维数组元素,以及使用结构体和共用体处理教师与学生信息。每个任务不仅强化了基本语法的应用,还涉及到了算法逻辑的设计与优化。实验结果显示,学生能够有效掌握并运用这些知识完成指定任务。
58 4
|
2月前
|
算法 程序员 索引
数据结构与算法学习七:栈、数组模拟栈、单链表模拟栈、栈应用实例 实现 综合计算器
栈的基本概念、应用场景以及如何使用数组和单链表模拟栈,并展示了如何利用栈和中缀表达式实现一个综合计算器。
48 1
数据结构与算法学习七:栈、数组模拟栈、单链表模拟栈、栈应用实例 实现 综合计算器
|
2月前
|
算法 搜索推荐 Shell
数据结构与算法学习十二:希尔排序、快速排序(递归、好理解)、归并排序(递归、难理解)
这篇文章介绍了希尔排序、快速排序和归并排序三种排序算法的基本概念、实现思路、代码实现及其测试结果。
38 1
|
2月前
|
存储 算法 定位技术
数据结构与算法学习二、稀疏数组与队列,数组模拟队列,模拟环形队列
这篇文章主要介绍了稀疏数组和队列的概念、应用实例以及如何使用数组模拟队列和环形队列的实现方法。
29 0
数据结构与算法学习二、稀疏数组与队列,数组模拟队列,模拟环形队列
|
2月前
【初阶数据结构】打破递归束缚:掌握非递归版快速排序与归并排序
【初阶数据结构】打破递归束缚:掌握非递归版快速排序与归并排序
|
2月前
|
算法
蓝桥杯宝藏排序 | 数据结构 | 快速排序 归并排序
蓝桥杯宝藏排序 | 数据结构 | 快速排序 归并排序
|
3月前
|
存储 Java
java数据结构,线性表顺序存储(数组)的实现
文章介绍了Java中线性表顺序存储(数组)的实现。线性表是数据结构的一种,它使用数组来实现。文章详细描述了线性表的基本操作,如增加、查找、删除、修改元素,以及其他操作如遍历、清空、求长度等。同时,提供了完整的Java代码实现,包括MyList接口和MyLinearList实现类。通过main函数的测试代码,展示了如何使用这些方法操作线性表。

热门文章

最新文章