【问题描述】

一个未排序整数数组,有正负数,重新排列使负数排在正数前面。并且要求不改变原来的正负数之间相对顺序。比如输入1、7、-5、9、-12、15,输出-5、-12、1、7、9、15。

【基本要求】

多种算法解决这个问题,并探讨有无时间复杂度O(N),空间复杂度O(1)的算法。

public class ch01 {public void operate(int maxSize,int[] numbs){int j=0;                          //为了把负数移到前面而设置的int m = 0,i,temp,k=0;             //m是为了寻找负数的具体位置,i是为了在一个范围内寻找负数,k是为了在一个范围内移动数字而设置for(i=m;i<maxSize;i++){           //一开始m是0,从0开始遍历这个序列if(numbs[i]<0){               //一旦发现该序列的其中一个元素小于0m=i;                      //让m来标记该元素的位置temp=numbs[i];            //把该元素暂存为tempfor(i=m;i>k;i--){         //把该元素前的元素一个个往后移numbs[i]=numbs[i-1];}k++;                      //第一次发现一个元素为负数,这个元素最终会被放进i=0的位置,k++是为了以后移动元素时不会干扰numbs[j]=temp;            //到已固定位置的元素j++;                      //j++是为了继续存放负数的元素}}System.out.println("用数组进行实现,排序完的序列为:");for(i=0;i<maxSize;i++){System.out.print(numbs[i]+" ");}System.out.println();}
}
public class ch02 {public static class Node{int data;Node next;public Node(){}public Node(int data){this.data=data;}}public void operate(int[] numbs){Node head=new Node();Node cur=head;                            //用来存放数组的元素Node p=head;                              //用来寻找小于0的元素Node insert=new Node();Node n=insert;                            //用来把小于0的元素存进数组中for(int numb:numbs){                      //用来把数组中的元素存进链表中Node node=new Node(numb);cur.next=node;cur=node;}while(p.next!=null){if(p.next.data<0){                    //把小于0的元素存进一个链表Node node=new Node(p.next.data);n.next=node;n=node;if(p.next.next==null){            //当数组中最后一个元素为负数时,需判断以便把该数存进专门存放负数的链表p.next=null;break;}p.next=p.next.next;               //把是负数的元素从链表断开continue;}p=p.next;                             //p向后移动}n.next=head.next;                     //存放负数的链表连接存放正数的链表head.next=insert.next;                //头结点连接一整个链表System.out.println("用链表进行实现,排序完的序列为:");while(head.next!=null){head=head.next;System.out.print(head.data+" ");}}
}
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;public class Test {public static void main(String[] args) throws IOException {String inputStr;boolean mark=false;int a=0;BufferedReader in = new BufferedReader(new InputStreamReader(System.in));do {try {System.out.println("请输入你要输入的整数序列的个数:");inputStr = in.readLine();a = Integer.parseInt(inputStr);if (a <= 0) {throw new NegativeIntegerException();}mark=true;} catch (NumberFormatException | NegativeIntegerException e) {System.out.println("非法输入!!!请输入一个正整数!");}}while(!mark);mark=false;int[] numbs = new int[a];do {try {System.out.println("请输入一个整数序列,敲回车隔开:");for (int i=0;i<a;i++) {inputStr = in.readLine();numbs[i] = Integer.parseInt(inputStr);}mark = true;} catch (NumberFormatException e) {System.out.println("非法输入!!!请输入一个正整数!");}}while (!mark);ch01 c=new ch01();c.operate(a,numbs);ch02 c1=new ch02();c1.operate(numbs);}private static class NegativeIntegerException extends Throwable {}
}

正负数排列(用链表和数组实现)相关推荐

  1. 程序员编程艺术第二十七章:不改变正负数相对顺序重新排列数组(无解?)

    第二十七章:不改变正负数之间相对顺序重新排列数组.时间O(N),空间O(1) 前言 本文开始之前,顺道说个事:CSDN最近开始评选10大博客专栏,投票地址为:http://event.blog.csd ...

  2. 不改变正负数相对顺序的重新排列

    //不改变正负数相对顺序的重新排列 #include<iostream> using namespace std; void partition_no_change(int *s, int ...

  3. 学习-Java数组之foreach遍历数组之正负数数量统计

    第1关:学习-Java数组之foreach遍历数组之正负数数量统计 任务描述 相关知识 foreach 语句 编程要求 测试说明 任务描述 本关任务:使用 foreach 语句统计数组中正负数的个数. ...

  4. Java实现-交错正负数

    给出一个含有正整数和负整数的数组,重新排列成一个正负数交错的数组. 注意事项 不需要保持正整数或者负整数原来的顺序. 您在真实的面试中是否遇到过这个题? Yes 样例 给出数组[-1, -2, -3, ...

  5. java五个数以升序排列,java4个数的数组排列

    java动态数组个数,,java4个数的数组排列,java数组动态赋值 JAVA 中在运用数组进行排序功能时,一般有四种方法:快速排序法.冒泡法.选择排序法.插 入排序法. 快速排序法主要是运用了 A ...

  6. 计算机中的正负数表示

    计算机中的正负数表示 在32位系统中,int类型占4个字节,一共是32个2进制位,int类型的首位是符号位,0代表正数,1代表负数,int的最大值是0x7fffffff(即除了最高的1Bit其他31位 ...

  7. MySQL 正负数排序

    一.数据准备 建表如下: CREATE TABLE `tab` (`id` int(11) NOT NULL AUTO_INCREMENT,`num` varchar(3) DEFAULT NULL, ...

  8. 【C语言】BC62统计数据正负数个数(DAY 4)

    BC62统计数据正负数个数 一次就通过了! 总结:原因来自于前面题的总结,用到的方法不外乎是循环输入 !=EOF 和数组遍历的方法,这两个方法在我前面的刷题文章中提到了. #include<st ...

  9. 顺序表正负数的调整 (10分)

    # **顺序表正负数的调整 (10分)** 顺序表的正负数的调整.实现如下操作:已知数组A[n]中的元素为整型的非零元素,将其调整成左右两部分,左边所有的元素都为负数,右边所有的元素都为正数,要求算法 ...

最新文章

  1. 验算双中心重叠积分程序
  2. 浅谈Ubuntu上离线安装包的制作与安装问题
  3. 3年营收翻8倍,网易智慧企业业务多品牌战略升级
  4. ElasticSearch创建文档
  5. mysql索引空间配置_加入空间mysql索引
  6. Jni Helloworld
  7. 计算机中丢失mpr.dll,mprmsg.dll
  8. 当数据处理做不到实时,应该怎么办?
  9. JAVA Long String类型之间的转换
  10. POI:Excel表解析与导出通用工具类
  11. 论文阅读笔记——个体识别研究中的计算机辅助照片匹配:以塞伦盖蒂猎豹为例
  12. 云IDE:CodeSandbox: 快速进行前端开发的云IDE
  13. python将图片保存到指定文件夹_python抓取网页图片并放到指定文件夹
  14. 1233850-99-1|2-(4-丙氧基苯基)咪唑[4,5f][1,10]邻菲啰啉|分子式:C22H18N4O-齐岳配体
  15. 有才而性缓,有智而气和
  16. lab 颜色模式的生理原因 黄色, 洋红色 刺眼。 绿色,蓝色,不刺眼。
  17. 21 个“微习惯”,让你在 2021 年轻松改善生活
  18. micropython入门 stm32_micropython(1):芯片 STM32 开发,也可以使用micropython开发,都很方便...
  19. 51 单片机 蜂鸣器
  20. 星球前线 | Libra最大的竞争对手是什么?Calibra高管给出答案

热门文章

  1. 河海大学计算机科学与技术考研,2021年河海大学计算机科学与技术(081200)考研专业目录_硕士研究生考试范围 - 学途吧...
  2. 查看微信中撤回的图片(RIO)
  3. 用python玩转数据慕课答案_大学慕课用Python玩转数据章节测验答案
  4. 福岛第一核电站的辐射水平已明显下降
  5. 《音乐达人秀:Adobe Audition实战200例》——实例6 麦克风说话和音乐播放等所有声音都混合录制...
  6. ios 项目开发中总结
  7. 哲理故事与管理之道(21)-用情感激励下属
  8. orcad capture 快速制作原理图库
  9. 状态机思路在嵌入式开发中的应用说明及注意事项(普罗米修斯中不少功能节点用了状态机的方法来写)
  10. 【互动媒体习作】创意编程作业——导航