两种快速排序的实现(C语言)

2023-10-29

这里写图片描述

两种搜索方式不一样,第 0种单向搜索,第1 种双向搜。
代码如下:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define MAXVAL 8
#define STATIC 0
void display();
int a[MAXVAL] = {8,2,1,3,4,5,6,9};
int quick1(int a[], int sta, int end)
{
    int i, j;
    int tmp = a[sta],temp;
    i = sta + 1;
    j = end;
    do
    {
        while(i <= j){if(a[i] >= a[sta]) break; i++;}
        if(i >= end)
        {
            temp = a[i - 1];
            a[i - 1] = a[sta];
            a[sta] = temp;

            return i - 2;
        }

        while(i < j){if(a[j] < a[sta]) break; j--;}
        if(i < j)
        {
            temp = a[j];
            a[j] = a[i];
            a[i] = temp;

        }
        if( i == j)
        {
            temp = a[i-1];
            a[i-1] = a[sta];
            a[sta] = temp;
            return i-1;
        }   
    }while(1);
    return -1;//avoid warning,not used.
}
void quicksort1(int a[],int sta,int end)
{
    int mid;
    int temp;
    if(sta >= end)
    {
        return;
    }
    if(end - sta == 1)
    {

        if(a[sta] > a[end])
        {

            temp = a[sta];
            a[sta] = a[end];
            a[end] = temp;
        }
        return ;
    }

    mid = quick1(a,sta,end);

    quicksort1(a,sta,mid);
    quicksort1(a,mid+1,end);
}
int quick0(int a[], int sta, int end)
{
    int i,j;
    int tmp = a[sta],temp;
    for(i = j = sta+1; i < end; i++)
    {
        if(a[i] <= tmp)
        {
            temp = a[j];
            a[j] = a[i];
            a[i] = temp;
            j++;


        }
    }

    temp = a[j-1];
    a[j-1] = a[sta];
    a[sta] = temp;
    return j-1;
}
void quicksort0(int a[],int sta,int end)
{
    int mid;
    if(sta >= end)
    {
        return;
    }
    display();
    mid = quick0(a,sta,end);
    quicksort0(a,sta,mid);
    quicksort0(a,mid+1,end);
}
void display()
{
    int i  = 0, j = 0;
    for(i = 0; i < MAXVAL; i++)
    {
        j += printf("%d ",a[i]);
        if(j >= 50)
        {
            j = 0;
            printf("\n");
        }
    }
    printf("\n");
}
bool verify(int a[])
{
    int i;
    for(i = 1; i < MAXVAL; i++)
    {
        if(a[i-1] > a[i])
            return false;
    }
    return true;
}
int main()
{
    int i = 0,j = 100;
    srand(time(NULL));
#if STATIC == 0 
    for(i = 0; i < MAXVAL; i++)
    {
        a[i] = rand() %20;//random some data
    }
#endif
    quicksort1(a,0,MAXVAL-1);// or quicksort0(a,0,MAXVAL);
    if(!verify(a))
    {
        printf("error \n");
        display();
    }
    return 0;       
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

两种快速排序的实现(C语言) 的相关文章

  • [POJ1088] 滑雪(递归dp)

    Description Michael喜欢滑雪百这并不奇怪 因为滑雪的确很刺激 可是为了获得速度 滑的区域必须向下倾斜 而且当你滑到坡底 你不得不再次走上坡或者等待升降机来载你 Michael想知道载一个区域中最长底滑坡 区域由一个二维数组

随机推荐

  • yolov5 6.0运行

    1 github下载yolov5 6 0代码 下载链接 2 利用Anaconda安装所需环境参考 如何配置pytorch 3 在pycharm打开文件并选择配置好的环境编译器 4 安装所需模块 利用作者提供的requirements txt
  • linux系统编程(七)进程

    文章目录 1 进程 1 1 进程相关概念 1 1 1 程序和进程 1 1 2 并发 1 1 3 单道程序设计 1 1 4 多道程序设计 1 1 5 CPU和MMU 1 1 6 进程控制块PCB 1 1 7 进程状态 1 2 环境变量 1 2
  • opencv条码(4)图像的flip之图形化界面

    flip函数可以实现图像反转 这里贴出mainwindow cpp的内容吧 书上的代码对应opencv2 2现在有些不能用了请注意 include mainwindow h include ui mainwindow h using nam
  • 华为OD机试 - 最小循环子数组(Java)

    题目描述 给定一个由若干整数组成的数组nums 请检查数组是否是由某个子数组重复循环拼接而成 请输出这个最小的子数组 输入描述 第一行输入数组中元素个数n 1 n 100000 第二行输入数组的数字序列nums 以空格分割 0 nums i
  • Java架构直通车——理解Tomcat架构设计

    文章目录 引入 Socket与SeverSocket 一个简单Web容器设计与实现 理解Tomcat架构设计 什么是Servlet Tomcat Servlet容器 引入 Socket与SeverSocket Socket Socket是网
  • SpringBoot整合Logback日志框架配置全解析

    一 Logback日志框架介绍 SpringBoot使用 Commons Logging 进行所有内部日志的记录 但默认配置也提供了对常用日志的支持 如 Java Util Logging Log4J2 和Logback 每种logger都
  • npm install node-sass的时候报错ERR gyp ERR C++

    今天在项目里执行npm i命令的是后报错一大片 搜了很多文章 都没有到点上 突然灵感一闪 可能是电脑上没有c 编译环境的问题 但是是我在电脑上运行c文件是正常的 搜到一篇文章里写的情况是这样的 npm分发的都是源码 npm install的
  • oracle如何得到32位的世界唯一随机数

    author skate time 2008 2 18 oracle如何得到32位的世界唯一随机数 我们在创建表的时候一般都用序列生成的数字来保证数据的唯一 但这只能保证在单个实例中 无法适合并行或远程的环境的主关键字 因为在各自环境理里可
  • 数据库基本概念、ubuntu安装MySQL

    安装MySQL参考了这篇博客 Ubuntu18 04 安装MySQL SQL创建表格 添加元组 MySQL创建数据库 需要创建的student和course表 进入sql前要先进入root用户 创建数据库 加分号代表结束语句 在数据库中建表
  • 阿里云通过全球加速实现IPv6地址转换

    购买全球加速实例和基础带宽包 打开 全球加速 先配置基础带宽包 点击实例 点击 加速区域 选择 添加接入地域 去配置监听 在 加速区域 复制 加速IP 到指定的DNS云解析处 添加AAAA记录 测试 开启手机热点 笔记本连上热点 取消属性里
  • 文件操作总结

    文章目录 一 文件三大核心内容 1 1打开文件 1 2读写操作 1 3关闭文件 二 文件基本知识点 2 1操作系统是以文件为单位对数据进行管理 2 2数据流 2 3文件路径 2 4文件打开方式 2 5文件缓存 2 6在 cpp文件中的读写模
  • C++数据结构——链栈的实现

    链栈的实现 其实是针对栈的元素的个数变化量很大的一种情况 使用数组的话有可能造成很大的数组浪费空间 这时使用链栈来动态伸长链栈就变得很优秀了 节点结构 pragma once template
  • Anaconda进入base环境

    bash source activate base python3 handler py
  • Android SERVICE后台服务进程的自启动和保持

    Android SERVICE后台服务进程的自启动和保持 2012 12 27 10 30 佚名 eoeAndroid 我要评论 0 字号 T T Service组件在android开发中经常遇到 其经常作为后台服务 需要始终保持运行 负责
  • 已知p值自由度 求t值 matlab,统计学中的F值、P值和r分别表示什么意思,怎么求-如何查看f值-数学-敖篮友同学...

    概述 本道作业题是敖篮友同学的课后练习 分享的知识点是如何查看f值 指导老师为束老师 涉及到的知识点涵盖 统计学中的F值 P值和r分别表示什么意思 怎么求 如何查看f值 数学 下面是敖篮友作业题的详细 题目 统计学中的F值 P值和r分别表示
  • Go 语言运算符文档与举例

    在Go语言中 有各种运算符可用于执行不同类型的操作 以下是一些常见的Go语言运算符及其说明和示例 下面是一个表格 归纳了常见的运算符类型和它们的说明 运算符类型 运算符 说明 算术运算符 相加两个操作数 相减两个操作数 相乘两个操作数 相除
  • 英语语言标准C1,【CEFR】国际通用的学生英语能力水平评测标准

    原标题 CEFR 国际通用的学生英语能力水平评测标准 教育家陶行知 育人和种花一样 需要先认识花木特点 再区别不同情况 给予施肥浇水和培养教育 英语学习的过程中 有的英语学习者会很迷惑 究竟自己在什么水平 什么样的水平需要什么样的语言能力
  • 二、XenServer 服务器配置

    重启完成XenServer 之后 进入菜单驱动文本控制台 Menu Driven Text Console 界面 1 切换到Network and Management Interface 配置管理网络 2 选择Configure Mana
  • 必须了解的8种神经网络架构

    机器学习已经在各个行业得到了大规模的广泛应用 并为提升业务流程的效率 提高生产率做出了极大的贡献 目前机器学习主要在以下方面应用 模式识别 实际场景中的目标 包括人脸 表情 语音识别等等 异常检测 例如信用卡交易的异常检测 传感器异常数据模
  • 两种快速排序的实现(C语言)

    两种搜索方式不一样 第 0种单向搜索 第1 种双向搜 代码如下 include