快速排序

简介:  #include<stdio.h> #include<stdlib.h>   void change(int *pa, int *pb)//根据地址交换两个变量的值 {     int temp = *pa;     *pa = *pb;     *pb = temp; }  


#include<stdio.h>

#include<stdlib.h>

 

void change(int *pa, int *pb)//根据地址交换两个变量的值

{

    int temp = *pa;

    *pa = *pb;

    *pb = temp;

}

 

void show(int *p, int n)//显示数组状态

{

    printf("\n此时此刻数组的状态");

    for (int i = 0; i < n; i++)

    {

        printf("%5d", p[i]);//*(p+i)

    }

}

 

void  Quicksort(int *p, int left, int right)

{

    printf("\n要处理的子序列    ");

    for (int i = left; i <= right; i++)//从左到右打印要处理子序列

    {

        printf("%5d", p[i]);

    }

 

    int i = left;//a[0] //最左边的数

    int j = right + 1;//a[10] 最右边的数

 

    if (i < j)//循环的可用条件

    {

        do

        {

            do

            {

                i++;

 

            } while (p[i]<p[left] && i <= right);//统计多少个小于它的数,p[i]就是最右边小于第一个数的数

 

            do

            {

                j--;

            } while (p[j] >= p[left] && j>left);//统计下标最左边大于第一个数的数

 

            printf("\na[%d]=%d,a[%d]=%d", i, p[i], j, p[j]);//打印中间数据

            if (i < j)

            {

                change(&p[i], &p[j]);

            }

            show(p, 10);

        } while (i < j);///j作为分割点     小于的数往左,大于的数往右

 

        change(&p[left], &p[j]);//j作为分割点

        printf("\np[%d]=%d", j, p[j]);

 

        show(p, 10);//

 

        Quicksort(p, left, j - 1);//分割左边

        Quicksort(p, j + 1, right);//分割右边

    }

}

 

void main()

{

    int a[10] = { 19, 9, 20, 8, 38, 49, 11, 58, 34, 22 };

    show(a, 10);//显示数组没有排序的状态

    Quicksort(a, 0, 10 - 1);

    show(a, 10);//显示数组没有排序的状态

 

    system("pause");

}

目录
相关文章
|
存储 移动开发 前端开发
【第35期】一文学会React-Router开发权限
【第35期】一文学会React-Router开发权限
424 0
|
机器学习/深度学习 人工智能 PyTorch
|
项目管理 Python
如何在Mac上安装多个Python环境
在你的Mac上使用多个Python环境可以对项目管理很有帮助,特别是在同时处理不同Python版本或不同的包需求时。在这篇文章中,我们将向你展示如何在Mac上轻松地安装和管理多个Python环境。
411 5
 如何在Mac上安装多个Python环境
|
Web App开发 JavaScript Java
自动化测试的利剑:Selenium WebDriver入门与实践
【9月更文挑战第21天】在软件开发的海洋中,自动化测试犹如一艘船,帮助开发者们快速航行至质量保证的彼岸。本文将作为你的罗盘,指引你了解和掌握Selenium WebDriver这一强大的自动化测试工具。通过深入浅出的方式,我们将探索Selenium WebDriver的基本概念、安装过程以及编写简单测试脚本的方法。无论你是刚接触自动化测试的新手,还是希望提升测试技能的开发者,这篇文章都将为你提供有价值的指导。
|
虚拟化
虚拟化——ovirt账号被禁用或者被锁住的解决方式
虚拟化——ovirt账号被禁用或者被锁住的解决方式
PADS新建元器件
前面我们已经讲解过如何新建一个元件库,那么接下来我们在新建的ubug_lib库中新建一个元器件。在新建元器件之前,我们了解一下基本概念,即在库管理器的筛选条件下显示的:封装、元件、线、逻辑,如下图所示:
494 0
|
Web App开发 安全 前端开发
「隐语小课」可防御侧信道攻击的 TEE 运行时环境 DOVE 解读
「隐语小课」可防御侧信道攻击的 TEE 运行时环境 DOVE 解读
621 0
|
前端开发 JavaScript
html轮播图
简介:本博客以最通俗移动的详细代码,告诉用户如何用html构建轮播图。
409 0
html轮播图
|
小程序
阿里云商标查询微信小程序上线(太方便了)
商标查询可以使用阿里云商标查询微信小程序,可以查询到商标信息和商标注册风险,输入商标名称、注册号、申请人即可查询,输入商标名称可以一键查询注册风险,阿里云百科分阿里云商标查询小程序入口及使用方法教程
784 0
阿里云商标查询微信小程序上线(太方便了)
|
机器学习/深度学习 自然语言处理 算法