C++把数字排序
描述
如题,详细如下:
 输入不超过1024个数字,以特殊数字结尾,如(-999),把数字从小到大排序。
思路
目前,我们有两种思路可以写:
1是 在输入的时候,排序数组。
 2是 先输入到数组,再排序。
其中,笔者认为第一种更简单,故此,本章采取第一种思路。
代码
#include <iostream>
using namespace std;//命名空间
int main()
{
    int num[1024] = {};//总数字数组
    int temp;//输入变量
    int count=0;//输入到数组位置
    int pos;//比数小的位置
    while (1) {
        pos = -999;//不存在的位置
        cin >> temp;//输入
        if (temp == -999) break;//如果输入-999就结束
        if (count != 0) {//如果当前不是第一位
            for (int i = count; i >=  0; i--) {
                if (temp <= num[i]) {//如果有比这个数小的
                    pos = i;
                }
            }
            if (pos == -999) {//当全部数组里面没有比这个数小的
                num[count] = temp;//移到最后一位
            }
            else {
                for (int x = count; x >= pos; x--) {//全部后移
                    num[x + 1] = num[x];
                }
                num[pos] = temp;//存储到后移的空位
            }
        }
        else {
            num[count] = temp;//第一位
        }
        count++;//位置+1
    }
   for (int i = 0; i < count; i++) {
       cout << num[i]<<" ";//依次输出
   }
   return 0;
}
不过这套算法的时间复杂为O(n^2) 最简单的quick sort为O(n*logn) 所以从最简上看,还是应该用quick sort
 解法2
#include <iostream>
using namespace std;
struct Num{
	int num = 0;
	Num* next = NULL;
	Num* last = NULL;
	bool S = false;
	bool E = false;
}n[1024];
int main() {
	int i = 2;
	Num* END = &n[1];
	Num* START = &n[0];
	START->S = true;
	START->next = &n[2];
	END->E = true;
	END->last = &n[2];
	n[2].last = START;
	n[2].next = END;
	int temp;
	while (true) {
		temp = 0;
		cin >> temp;
		if (temp == -999) break;
		n[i].num = temp;
		if(i!=2) {
			Num* s = START->next;
			bool flag = false;
			while (1) {
				if (s->E) {
					break;
				}
				else if (s->num <= temp&&s->next->num>=temp) {
					Num* b = s->next;
					Num* l = s->next->last;
					b->last = &n[i];
					n[i].next = b;
					l->next = &n[i];
					n[i].last = l;
					flag = true;
					break;
				}
				s = s->next;
			}
			if (!flag) {
				if (temp < START->next->num) {
					n[i].next = START->next;
					n[i].last = START;
					START->next->last = &n[i];
					START->next = &n[i];
				}
				if (temp >= END->last->num) {
					END->last->next = &n[i];
					END->last = &n[i];
					n[i].last = END->last;
					n[i].next = END;
				}
			}
		}
		i++;
	}
	Num* out = START;
	for (int a = 0; a < i; a++) {
		out = out->next;
		if (out->E)break;
		cout << out->num << " ";
	}
	return 0;
}
End
C++把数字排序的更多相关文章
- 基于Hadoop 2.6.0运行数字排序的计算
		上个博客写了Hadoop2.6.0的环境部署,下面写一个简单的基于数字排序的小程序,真正实现分布式的计算,原理就是对多个文件中的数字进行排序,每个文件中每个数字占一行,排序原理是按行读取后分块进行排序 ... 
- CCF系列之数字排序(201503-2)
		问题描述试题编号: 201503-2试题名称: 数字排序时间限制: 1.0s内存限制: 256.0MB问题描述: 问题描述 给定n个整数,请统计出每个整数出现的次数,按出现次数从多到少的顺序输出. 输 ... 
- SQL SERVER 字符串按数字排序
		需求是这样的: 数据库表里面有一个字段类型是nvachar,存的值是数字和字符混合的,要实现先按数字排序,再按字母倒序. 思路: 考虑这个字段的值是否是有规律可循的,把要按数字排序的部分转换为数字,再 ... 
- CCF CSP 201503-2 数字排序 (map+自定义排序)
		题目链接:http://118.190.20.162/view.page?gpid=T26 返回试题列表 问题描述 试题编号: 201503-2 试题名称: 数字排序 时间限制: 1.0s 内存限制: ... 
- JavaScript按纯数字排序
		直接上代码: var arr=[ {name:"张散步",age:"23",sports:"篮球",number:"23112 ... 
- php冒泡排序实现方法,传入几个数字排序后 输出实战例子
		php冒泡排序实现方法,传入几个数字排序后 输出实战例子 算法和数据结构是一个编程工作人员的内功.四种入门级排序算法: 冒泡排序.选择排序.插入排序.快速排序. 一.冒泡排序 原理:对一组数据,比较相 ... 
- CCF CSP 201503-2 数字排序
		CCF计算机职业资格认证考试题解系列文章为meelo原创,请务必以链接形式注明本文地址 CCF CSP 201503-2 数字排序 问题描述 给定n个整数,请统计出每个整数出现的次数,按出现次数从多到 ... 
- mysql将字符串字段转为数字排序或比大小
		SELECT * FROM Student WHERE 1 = 1 ORDER BY -ID DESC ; SELECT * FROM Student WHERE 1 = 1 ORDER BY (ID ... 
- sort()函数到底是怎样进行数字排序的
		很多人会用sort(),并不见得知道它具体是怎样给数字排序的.其实不知道也行,会用就可以,感兴趣的可以来看看. var numberArray = [2,4,1,3]; numberArray.sor ... 
- CCF201503-2 数字排序 java(100分)
		试题编号: 201503-2 试题名称: 数字排序 时间限制: 1.0s 内存限制: 256.0MB 问题描述: 问题描述 给定n个整数,请统计出每个整数出现的次数,按出现次数从多到少的顺序输出. 输 ... 
随机推荐
- 总结下flask中的宏、Jinjia2语法
			这几天学的东西比较多,时间又有点不够用,趁着快吃饭了,赶紧总结总结. 00x1 宏: 如果学过C语言的童鞋,可能知道宏在C语言里面是一个定义一个固定参数的变量.在flask里面,宏是相当于一个函数的作 ... 
- 对flask的学习
			任务需求:一个登录,注册页面 任务环境:pycharm 2018 专业版,python3.7,win 10专业版 ------------------------------------------- ... 
- Hello!OA!Hello!工作流!寻找OA和工作流的旅途记录
			最近新到了一家公司,这家公司做的人力资源管理,需要一个OA系统,所以就让我做一个选型,经过我2周时间的筛选,试用,沟通,测试,最终确定了几款,这个艰辛的路程,在这里记录一下~ 寻找OA的路程----- ... 
- 补:冲刺Day2
			每天举行站立式会议照片: 昨天已完成的工作: 各个成员在 Alpha 阶段认领的任务. 今天各个成员的任务安排. 冲刺Day1博客. 今天计划完成的工作: 成员 任务 高嘉淳 完成登陆.注册 覃泽泰 ... 
- Scrum冲刺_Day01
			一.团队展示: 1.项目:light_note备忘录 2.队名:删库跑路队 3.团队成员 队员(不分先后) 项目角色 黄敦鸿 后端工程师.测试 黄华 后端工程师.测试 黄骏鹏 后端工程师.测试 黄源钦 ... 
- 【APIO2019】桥梁(询问分块)
			Description 给定一张 \(n\) 个点,\(m\) 条边的无向图,边 \(i\) 的权值为 \(d_i\).现有 \(q\) 次操作,第 \(j\) 个操作有两种模式: \(1\ b_j\ ... 
- VMware虚拟机下Centos8 设置静态IP地址
			缘起 我们在平时学习Redis.Nginx等分布式微服务的组件的时候,无法避免的需要用到Linux操作系统,而Linux操作系统的主机来源差不多就三种情况: 真实物理机 阿里云等云服务器 利用虚拟机 ... 
- hive实例的使用
			一.hive用本地文件进行词频统计 1.准备本地txt文件 2.启动hadoop,启动hive 3.创建数据库,创建文本表 4.映射本地文件的数据到文本 5.hql语句进行词频统计交将结果保存到结果表 ... 
- BIOS、UEFI、Boot Loader都是些什么
			BIOS.UEFI.Boot Loader都是些什么 目录 BIOS.UEFI.Boot Loader都是些什么 什么是BIOS 基本的输入输出是什么 自检程序"检"了什么 系统自 ... 
- 职场中究竟什么是ownership,你是一个有ownership的人吗?
			在互联网行业,我们经常用一个标准去评价一个人,这个标准就是ownership.一个有ownership的员工往往会被认为是出色的,被委以重任,从此升职加薪.而一个被打上了没有ownership的人,往 ... 
