顺序表排序相关算法题|负数移到正数前面|奇数移到偶数前面|小于x的数移到大于x的数前面|快排思想(C)

负数移到正数前面

已知顺序表 ( a 1 , … , a n ) (a_{1},\dots,a_{n}) (a1,,an),每个元素都是整数,把所有值为负数的元素移到全部正数值元素前边

算法思想

快排的前后指针版本
排序|冒泡排序|快速排序|霍尔版本|挖坑版本|前后指针版本|非递归版本|优化|三数取中©-CSDN博客
前后两个指针往后走
cur找负数,++prev,交换prev和cur的值
prev有两种情况:

  1. 在cur还没遇到正数的时候,prev紧跟着cur
  2. 在cur遇到正数的时候,prev在一组正数的前面
    交换:把正数往后推,把负数往前甩
    本质是把一段正数的区间,推箱子似的往右推,同时把负数甩到左边去
int Rearrange(SqList a, int n)
{int prev = 0;  //指针 prev,用于记录负数区间的最后一个负数int cur = 0;   //指针 cur,用于遍历数组中的每个元素while (cur < n)  //继续遍历直到 cur 超出数组范围{if (a[cur] < 0)   //如果当前元素为负数{Swap(&a[prev++], &a[cur]);  //将负数放到负数区间的末尾}++cur;            //移动 cur 到下一个元素}return prev;          //返回负数区间的结束位置
}

![[Pasted image 20241025141506.png]]

cur指向的是负数,与prev交换,prev++
![[Pasted image 20241025141633.png]]

cur++,判断下一个元素
![[Pasted image 20241025141655.png]]

为3,cur继续往下遍历
![[Pasted image 20241025141715.png]]

cur指向-4,与prev交换,prev++
![[Pasted image 20241025141813.png]]

cur++
![[Pasted image 20241025141826.png]]

指向-1,与prev交换,prev++
![[Pasted image 20241025141906.png]]

cur++
![[Pasted image 20241025141917.png]]

为6,结束循环

小于x移到大于x前面

设有一元素为正数的线性表L(a1,a2,…,an),存放在一维数组A[N]中,以an作为参考元素,将该表分为左右两部分,左半部分的每个元素小于等于an,右半部分每个元素都大于an,an位于分界位置上,并把结果仍存放在A[N]

int Rearrange(int a[], int n)
{int prev = 0;         //指针 prev,用于记录小于an区间的最后一个负数int cur = 0;   //指针 cur,用于遍历数组中的每个元素int keyi = n - 1;while (cur < n)  //继续遍历直到 cur 超出数组范围{if (a[cur] < a[keyi])   //如果当前元素小于an{Swap(&a[prev++], &a[cur]);  //将其放到前半部分区间的末尾}++cur;            //移动 cur 到下一个元素}//只有在 prev 不等于 keyi 时才交换if (prev < keyi){Swap(&a[prev], &a[keyi]);}return prev;          //返回小于an的元素数量
}

奇数移到偶数前面

已知线性表按顺序存储,且每个元素都是整数均不相同,把所有奇数移到所有偶数前边

思想同上

int Rearrange(SqList a, int n)
{int prev = 0;  //指针 prev,用于记录负数区间的最后一个负数int cur = 0;   //指针 cur,用于遍历数组中的每个元素while (cur < n)  //继续遍历直到 cur 超出数组范围{if (a[cur] % 2 != 0)   //如果当前元素为奇数{Swap(&a[prev++], &a[cur]);  //将奇数放到前半区间的末尾}++cur;            //移动 cur 到下一个元素}return prev;          //返回奇数区间的结束位置
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/58482.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何在Linux系统中使用LVM进行磁盘管理

如何在Linux系统中使用LVM进行磁盘管理 LVM简介 安装LVM 在Debian/Ubuntu系统中安装 在CentOS/RHEL系统中安装 创建物理卷 准备磁盘 创建卷组 创建逻辑卷 格式化逻辑卷 挂载逻辑卷 扩展逻辑卷 扩展现有物理卷 添加新的物理卷 调整卷组 调整卷组大小 使用LVM快照 LVM监控 查…

kaggle 数据集下载

文章目录 kaggle 数据集下载&#xff08;1&#xff09; 数据集下载&#xff08;2&#xff09; 手机号验证 kaggle 数据集下载 这两天想学习 kaggle 赛事 把深度学习相关的内容自己给过一遍&#xff0c;快忘得差不多了&#xff0c;惭愧。 参考了好多帖子&#xff0c;使用命令行…

力扣题86~90

题86&#xff08;中等&#xff09;&#xff1a; python代码 # Definition for singly-linked list. # class ListNode: # def __init__(self, val0, nextNone): # self.val val # self.next next class Solution:def partition(self, head: Optional[Li…

rhcsa、ce复习(每日编辑,复习完为止)

红帽认证考试内容可以划分为以下几个主要模块&#xff1a; 1. 红帽认证系统管理员&#xff08;RHCSA&#xff09; 系统管理基础&#xff1a;包括安装和部署红帽企业Linux&#xff08;RHEL&#xff09;&#xff0c;磁盘分区&#xff0c;以及软件包的选择和管理。 用户和组…

探索 JavaScript 事件机制(四):React 合成事件系统

前言 在前端开发中&#xff0c;事件处理是不可或缺的一部分。在众多的前端框架中&#xff0c;React 凭借其高效和灵活性受到众多开发者的喜爱。React 的事件处理系统&#xff0c;即“合成事件系统”&#xff0c;是其性能优化的一大亮点。 本文将带你深入浅出地探索 React 的合…

反悔贪心学习笔记[浅谈]

贪心是信息学竞赛常考内容&#xff0c;一般来说为选择当前情况下最优情况的算法&#xff0c;非常好写&#xff0c;但部分贪心题目无法使用普通贪心解决&#xff0c;在这些题目中就有一类为反悔贪心。 反悔贪心经常会用到堆来为主答案&#xff0c;例题&#xff1a; Work Schedu…

java-web-day6-下-知识点小结

JDBC JDBC --是sun公司定义的一套操作所有关系型数据库的规范, 也就是接口api 数据库驱动 --是各个数据库厂家根据JDBC规范的具体实现, 例如mysql的驱动依赖 Lombok 简介 Lombok是一个实用的java类库, 通过注解的方式自动生成构造器, getter/setter, equals, hashcode, toStr…

Http 状态码 301 Permanent Rediret 302 Temporary Redirect、 重定向 重写

HTTP状态码301和302是什么&#xff1f; 1、HTTP状态码301 HTTP状态码301表示永久性转移&#xff08;Permanent Redirect&#xff09;&#xff0c;这意味着请求的资源已经被分配了一个新的URI&#xff0c;以后的引用应该使用资源现在所指的URI。 HTTP 301状态码表示请求的资源…

数据结构————map,set详解

今天带来map和set的详解&#xff0c;保证大家分清楚 一&#xff0c;概念 map和set是一种专门用来搜索的容器或数据结构 map能存储两个数据类型&#xff0c;我们称之为<key-value>模型 set只能存储一个数据类型&#xff0c;我们称之为纯<key>模型 它们的效率都非…

java中Scanner的nextLine和next方法

思考&#xff0c;输入1 2 3 4 5加上enter&#xff0c;输出什么 import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner sc new Scanner(System.in);int[][] m new int[2][2];for (int i 0; i < 2; i) {for (int j 0; j < 2;…

互联网人小生意平台推荐,思考适合你的副业机会!

前几天写了一篇关于互联网人尽早找到自己一人能做的小生意&#xff0c;尽早觉醒&#xff1a;找到自己一人能做的互联网生意 收到不少读者私信和评论关于小生意怎么做&#xff0c;能感觉到大家对于如何开启小生意及如何利用好互联网平台这块充满兴趣。 尤其是针对设计、技术等互…

第5次CCF CSP认证真题解

1、数列分段 题目链接&#xff1a;https://sim.csp.thusaac.com/contest/5/problem/0 区分每一段的方法就是判断数列中的每一个数是否与前一个数相等。 100分代码&#xff1a; #include <iostream> using namespace std; int main(int argc, char *argv[]) {int n;ci…

C++ 模板专题 - 变长模板

一&#xff1a;概述 C 变长模板&#xff08;Variadic Templates&#xff09;允许你定义接受任意数量模板参数的模板。这种功能在 C11 中引入&#xff0c;非常灵活&#xff0c;常用于实现类型安全的容器、函数等。变长模板基本语法&#xff1a; template<typename... Args&g…

python 深度学习 项目调试 识别数学公式 LaTeX-OCR

起因&#xff0c; 目的: 提取图片中的数学公式。 其实这个项目&#xff0c;我很久之前就做过。 而且,我还录了一个视频: https://www.bilibili.com/video/BV1nD421p7jS/?vd_source198e876d811b3ccea94908fd163c223f 简介: 项目来源: https://github.com/lukas-blecher/La…

【专题】计算机网络之数据链路层

数据链路层的地位&#xff1a;网络中的主机、路由器等都必须实现数据链路层。 数据链路层信道类型&#xff1a; 点对点信道。 使用一对一的点对点通信方式。 广播信道。 使用一对多的广播通信方式。 必须使用专用的共享信道协议来协调这些主机的数据发送。 1. 使用点对点信道…

手机备忘录怎么导出到电脑,

在忙碌的现代生活中&#xff0c;我们常常需要在手机和电脑之间切换工作&#xff0c;手机里的备忘录记录了我们的重要事项&#xff0c;有时候需要在电脑端查看和处理。那么&#xff0c;如何将手机备忘录的内容导出到电脑呢&#xff1f;其实&#xff0c;这个问题的解决方法并不复…

【Python爬虫】获取汽车之家车型配置附代码(2024.10)

参考大哥&#xff0c;感谢大哥&#xff1a;https://blog.csdn.net/weixin_43498642/article/details/136896338 【任务目标】 工作需要想更方便地下载汽车之家某车系配置清单&#xff1b;&#xff08;垃圾汽车之家不给下载导出表格&#xff0c;配置页叉掉了车系要出来还要重新…

架构师备考-背诵精华(计算机语言)

定义 计算机语言是指用于人与计算机之间交流的一种语言&#xff0c;是人与计算机之间传递信息的媒介。计算机语言主要由一套指令组成&#xff0c;而这种指令一般包括&#xff1a;表达式、流程控制和集合三大部分内容。 表达式包括&#xff1a;变量、常量、字面量和运算符流程控…

一个简单的 uas_send_bye.xml for SIPp

<?xml version"1.0" encoding"UTF-8" ?> <!DOCTYPE scenario SYSTEM "sipp.dtd"> <scenario name"iinv-o200-obye.xml -- wjd 2014"><recv request"INVITE" rrs"true"/><send>&l…

【瑞吉外卖】-day01

目录 前言 第一天项目启动 获取资料 创建项目 ​编辑 连接本地数据库 连接数据库 修改用户名和密码 ​编辑创建表 创建启动类来进行测试 导入前端页面 创建项目所需目录 检查登录功能 登录界面 登录成功 登录失败 代码 退出功能 易错点 前言 尝试一下企业级项…