作者forb9823018 (风过无痕)
看板MATLAB
标题[讨论] 排序与搜寻
时间Fri Jan 2 23:39:40 2015
假如我有一个x[6]=[3,5,3,1,2,4];
[a,index]=sort(x);
得到a=[1,2,3,3,4,5];
index=[4,5,1,3,6,2];
但如果要分别找1,2,3,4,5分别是在排序後的第几个数字
是不是只能分别找
有没有办法在排序时就用另一个矩阵存下来?
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 140.113.202.193
※ 文章网址: http://webptt.com/cn.aspx?n=bbs/MATLAB/M.1420213183.A.CA0.html
1F:→ mp19990920: 排序後的 index 就是 1:length(x) 啊! 01/03 08:15
2F:→ forb9823018: 楼上的意思是总长度? 但我要找的是例如我要找3是在 01/03 11:56
3F:→ forb9823018: 排序後的哪个位置但每次要找一次不同的数字 01/03 11:57
4F:→ forb9823018: 都要整个数列搜寻一次 01/03 11:57
5F:→ forb9823018: 有没有办法在排序时就先存起来? 01/03 11:57
6F:→ gotodmcyo: 就是1F说的index啊? 01/03 13:20
7F:→ mp19990920: a = [1,2,3,3,4,5]; iA = 1:length(a); 01/03 14:19
8F:→ mp19990920: iA = [1,2,3,4,5,6]; 01/03 14:19
9F:→ mp19990920: ↑ 01/03 14:20
10F:→ mp19990920: 第 2 个 3 在第 4 个数字 01/03 14:21
11F:→ forb9823018: 但这样没有对应关系要怎麽找?肉眼一看就知道但 01/03 14:26
12F:→ forb9823018: 没有建立一对一的对应关系所以还是要整个数列搜寻? 01/03 14:27
13F:→ mp19990920: ..... 为啥你会认为 a 跟 iA 并非一对一对应 01/03 16:59
14F:→ forb9823018: 因为知道'5'这个数字之後要一个一个从a[1]、a[2]... 01/03 17:13
※ 编辑: forb9823018 (140.113.202.193), 01/03/2015 17:14:57
15F:→ forb9823018: 直到a[6]才找到 iA对找寻'5'这个数字并没有帮助 01/03 17:16
16F:→ forb9823018: 不管a是什麽,只要总长度一样 iA永远都一样 01/03 17:25
17F:→ mp19990920: 你该不会不知道有 find 这个 function 吧!!! 01/03 17:29
18F:→ forb9823018: 那就等於每个数字都要find一次,也就是整个数列要找 01/03 17:44
19F:→ forb9823018: 过一遍计算量会很大,在排序时有办法就先排好吗? 01/03 17:45
20F:→ forb9823018: 我想到一个不算太聪明的办法 01/03 17:56
21F:→ forb9823018: 应该有更好的写法 01/03 17:56
22F:→ forb9823018: 就是排序完再跑一个回圈 01/03 17:57
23F:→ forb9823018: 1:length(a) 01/03 17:57
24F:→ forb9823018: for i=1:length(a) 01/03 18:00
25F:→ forb9823018: b[a[i]]=i; 不过要把重复数字的定义好 01/03 18:04
※ 编辑: forb9823018 (140.113.202.193), 01/03/2015 18:11:37
26F:→ gotodmcyo: 排序问题随便找一本资料结构就有 01/03 19:48
27F:→ mp19990920: 乱入又不看懂问题 ... 他已经 sort 过了 01/03 20:08
28F:→ mp19990920: a=[1,2,3,3,4,5]; 01/03 20:08
29F:→ mp19990920: index=[4,5,1,3,6,2]; 你要的是啥? 01/03 20:09
30F:→ forb9823018: 就是打数值直接知道位置不用find还要花时间找 01/03 20:54
31F:→ gotodmcyo: ??m大是指我吗?我想说他要找一个复杂度低一点的演算法 01/03 21:20
32F:→ gotodmcyo: 去找他要的东西 01/03 21:20
33F:→ forb9823018: sort没问题,我想问的是能不能在排序时 01/03 23:14
34F:→ forb9823018: 就顺便做到我推文中程式码的效果 01/03 23:14
35F:→ forb9823018: 而不用再跑回圈给值一次 01/03 23:15
36F:→ mp19990920: 问题是你的回圈有问题啊 b[a[3]]=3 b[a[4]]=4 01/04 12:47
37F:→ mp19990920: 所以 b[3]=3 被 b[3]=4 盖掉了 01/04 12:47
38F:→ forb9823018: 所以我後面附注有说要把重复的数字定义好 01/04 15:25
39F:→ forb9823018: 至於要怎麽定义就看应用 01/04 15:25