数据结构_bubble_sort
问题描述
给定一个 1~N 的排列 P,即 1 到 N 中的每个数在 P 都只出现一次。 现在要
对排列 P 进行冒泡排序,代码如下:
for (int i = 1; i <= N; ++i)
for (int j = N, t; j > i; ‐‐j)
if (P[j ‐ 1] > P[j])
t = P[j], P[j] = P[j ‐ 1], P[j ‐ 1] = t;
在排序过程中,数字的位置可能会发生变化。对于 1~ N 的每个数字,你需
要输出过程中达到的最左位置下标和最右位置下标的差的绝对值。
★数据输入
第一行为 N,表示排列长度。
第二行为排列 P。
数据保证:
80%的数据, N <= 1000
100%的数据, N <= 100000
★数据输出
输出一行,第 i 个数字表示数字 i 最左与最右位置的差的绝对值。
| 输入示例 | 输出示例 |
| 4 3 2 1 4 |
2 1 2 0 |
★注释
样例冒泡排序过程:
swap 2 1: 3 2 1 4 > 3 1 2 4
swap 3 1: 3 1 2 4 > 1 3 2 4
swap 3 2: 1 3 2 4 > 1 2 3 4
思路
定义结构体,成员有:data(数据值、排序后下标)、pos(排序前下标)、num(当前数右边比它小的数)
归并,过程中统计数右边比它小的数,更新num
最大下标为pos+num,最小下标为data或pos
PS:好像用树状数组做也可以,但是我不会╮(๑•́ ₃•̀๑)╭
code
#include <stdio.h>
#include <stdlib.h> struct Node
{
int data;
int pos;
int num;
}; Node *buf; inline int max(int a, int b)
{
return a>b?a:b;
}
inline int min(int a,int b)
{
return a<b?a:b;
} void mergesort(Node *arr, int l,int r)
{
if(l>=r) return ;
if(l+==r)
{
if(arr[l].data > arr[r].data)
{
Node tmp = arr[l];
arr[l] = arr[r];
arr[r] = tmp;
arr[r].num++;
}
} int m = (l+r)/;
int i,j,k;
int num=;
mergesort(arr,l,m);
mergesort(arr,m+,r);
for(i=l;i<=r;i++) buf[i] = arr[i];
for(k=l,i=l,j=m+ ; k<=r; k++)
{
if(i>m)
{
arr[k] = buf[j++];
}
else if(j>r)
{
arr[k] = buf[i++];
arr[k].num += num;
}
else if(buf[i].data < buf[j].data)
{
arr[k] = buf[i++];
arr[k].num += num;
}
else
{
arr[k] = buf[j++];
num++;
}
}
} int main()
{
int i,j,k;
int n;
scanf("%d",&n);
Node *arr = (Node *)malloc(sizeof(Node)*(n+));
buf = (Node *)malloc(sizeof(Node)*(n+));
for(i=;i<=n;i++)
{
scanf("%d",&arr[i].data);
arr[i].pos = i;
arr[i].num = ;
}
mergesort(arr,,n);
for(i=;i<=n;i++)
{
if(i==)
printf("%d",arr[i].num+arr[i].pos-min(arr[i].data,arr[i].pos));
else
printf(" %d",arr[i].num+arr[i].pos-min(arr[i].data,arr[i].pos));
}
printf("\n"); free(arr);
free(buf);
return ;
}
数据结构_bubble_sort的更多相关文章
- 多线程爬坑之路-学习多线程需要来了解哪些东西?(concurrent并发包的数据结构和线程池,Locks锁,Atomic原子类)
前言:刚学习了一段机器学习,最近需要重构一个java项目,又赶过来看java.大多是线程代码,没办法,那时候总觉得多线程是个很难的部分很少用到,所以一直没下决定去啃,那些年留下的坑,总是得自己跳进去填 ...
- 一起学 Java(三) 集合框架、数据结构、泛型
一.Java 集合框架 集合框架是一个用来代表和操纵集合的统一架构.所有的集合框架都包含如下内容: 接口:是代表集合的抽象数据类型.接口允许集合独立操纵其代表的细节.在面向对象的语言,接口通常形成一个 ...
- 深入浅出Redis-redis底层数据结构(上)
1.概述 相信使用过Redis 的各位同学都很清楚,Redis 是一个基于键值对(key-value)的分布式存储系统,与Memcached类似,却优于Memcached的一个高性能的key-valu ...
- 算法与数据结构(十五) 归并排序(Swift 3.0版)
上篇博客我们主要聊了堆排序的相关内容,本篇博客,我们就来聊一下归并排序的相关内容.归并排序主要用了分治法的思想,在归并排序中,将我们需要排序的数组进行拆分,将其拆分的足够小.当拆分的数组中只有一个元素 ...
- 算法与数据结构(十三) 冒泡排序、插入排序、希尔排序、选择排序(Swift3.0版)
本篇博客中的代码实现依然采用Swift3.0来实现.在前几篇博客连续的介绍了关于查找的相关内容, 大约包括线性数据结构的顺序查找.折半查找.插值查找.Fibonacci查找,还包括数结构的二叉排序树以 ...
- 算法与数据结构(九) 查找表的顺序查找、折半查找、插值查找以及Fibonacci查找
今天这篇博客就聊聊几种常见的查找算法,当然本篇博客只是涉及了部分查找算法,接下来的几篇博客中都将会介绍关于查找的相关内容.本篇博客主要介绍查找表的顺序查找.折半查找.插值查找以及Fibonacci查找 ...
- 算法与数据结构(八) AOV网的关键路径
上篇博客我们介绍了AOV网的拓扑序列,请参考<数据结构(七) AOV网的拓扑排序(Swift面向对象版)>.拓扑序列中包括项目的每个结点,沿着拓扑序列将项目进行下去是肯定可以将项目完成的, ...
- 算法与数据结构(七) AOV网的拓扑排序
今天博客的内容依然与图有关,今天博客的主题是关于拓扑排序的.拓扑排序是基于AOV网的,关于AOV网的概念,我想引用下方这句话来介绍: AOV网:在现代化管理中,人们常用有向图来描述和分析一项工程的计划 ...
- 掌握javascript中的最基础数据结构-----数组
这是一篇<数据结构与算法javascript描述>的读书笔记.主要梳理了关于数组的知识.部分内容及源码来自原作. 书中第一章介绍了如何配置javascript运行环境:javascript ...
随机推荐
- MySQL安装后默认自带数据库的作用
大家在学习MySQL时,安装后都会发现里边已经自带了几个默认的数据库,我装的MySQL5.5里边自带六个数据库 网上查了一些资料对这几个数据库的功能做一下学习. 1.information_schem ...
- C#进阶之路(一):委托
一.什么是委托 简单说它就是一个能把方法当参数传递的对象,而且还知道怎么调用这个方法,同时也是粒度更小的“接口”(约束了指向方法的签名). 委托是一个类,它定义了方法的类型,使得可以将方法当作另一个方 ...
- 让人蛋疼的“Oracle.DataAccess.dll”
项目介绍:为前台网站提供rest接口来操作erp相关数据 涉及db:oracle11 技术方案:因为erp是用remoting来调用,我想rest实现部分调用remoting来操作减少耦合,当然性能上 ...
- Unity5-ABSystem(五):AssetBundle内存
http://blog.csdn.net/lodypig/article/details/51879702 AssetBundle内存占用 建议 实测 www加载实测 LoadFromFile加载实测 ...
- mysql之 Innobackupex全备恢复(原理、演示)
一. Innobackupex恢复原理 After creating a backup, the data is not ready to be restored. There might b ...
- IHE 官方网址有用资源介绍
实现标准: http://www.ihe.net/Technical_Frameworks/ 各个实现框架文档, 比如XDS,XCA,PIX,PDQ等 测试工具:http://www.ihe.net/ ...
- GIT学习地址
https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000 git下载:https://gi ...
- 蓝桥杯 基础练习 BASIC-19 完美的代价
基础练习 完美的代价 时间限制:1.0s 内存限制:512.0MB 问题描述 回文串,是一种特殊的字符串,它从左往右读和从右往左读是一样的.小龙龙认为回文串才是完美的.现在给你一个串,它不一定 ...
- POJ2773(容斥原理)
Happy 2006 Time Limit: 3000MS Memory Limit: 65536K Total Submissions: 11458 Accepted: 4001 Descr ...
- 问题:oracle 排序 null值放在最后;结果: ORACLE中null的排序问题
ORACLE中null的排序问题 关键字: oracle nulls 问题描述: 在平时的业务处理中,经常遇到要对业务数据进行排序,并且要对null值也做相应的排序.在Oracle中,进行Ord ...