[讨论] 排序与搜寻

楼主: forb9823018 (风过无痕)   2015-01-02 23:39:40
假如我有一个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分别是在排序后的第几个数字
是不是只能分别找
有没有办法在排序时就用另一个矩阵存下来?
作者: mp19990920 (郝渴连)   2015-01-03 08:15:00
排序后的 index 就是 1:length(x) 啊!
楼主: forb9823018 (风过无痕)   2015-01-03 11:56:00
楼上的意思是总长度? 但我要找的是例如我要找3是在排序后的哪个位置但每次要找一次不同的数字都要整个数列搜寻一次有没有办法在排序时就先存起来?
作者: gotodmcyo (键盘小妹)   2015-01-03 13:20:00
就是1F说的index啊?
作者: mp19990920 (郝渴连)   2015-01-03 14:19:00
a = [1,2,3,3,4,5]; iA = 1:length(a);iA = [1,2,3,4,5,6];↑第 2 个 3 在第 4 个数字
楼主: forb9823018 (风过无痕)   2015-01-03 14:26:00
但这样没有对应关系要怎么找?肉眼一看就知道但没有建立一对一的对应关系所以还是要整个数列搜寻?
作者: mp19990920 (郝渴连)   2015-01-03 16:59:00
..... 为啥你会认为 a 跟 iA 并非一对一对应
楼主: forb9823018 (风过无痕)   2015-01-03 17:13:00
因为知道'5'这个数字之后要一个一个从a[1]、a[2]...直到a[6]才找到 iA对找寻'5'这个数字并没有帮助不管a是什么,只要总长度一样 iA永远都一样
作者: mp19990920 (郝渴连)   2015-01-03 17:29:00
你该不会不知道有 find 这个 function 吧!!!
楼主: forb9823018 (风过无痕)   2015-01-03 17:44:00
那就等于每个数字都要find一次,也就是整个数列要找过一遍计算量会很大,在排序时有办法就先排好吗?我想到一个不算太聪明的办法应该有更好的写法就是排序完再跑一个循环1:length(a)for i=1:length(a)b[a[i]]=i; 不过要把重复数字的定义好
作者: gotodmcyo (键盘小妹)   2015-01-03 19:48:00
排序问题随便找一本资料结构就有
作者: mp19990920 (郝渴连)   2015-01-03 20:08:00
乱入又不看懂问题 ... 他已经 sort 过了a=[1,2,3,3,4,5];index=[4,5,1,3,6,2]; 你要的是啥?
楼主: forb9823018 (风过无痕)   2015-01-03 20:54:00
就是打数值直接知道位置不用find还要花时间找
作者: gotodmcyo (键盘小妹)   2015-01-03 21:20:00
??m大是指我吗?我想说他要找一个复杂度低一点的算法去找他要的东西
楼主: forb9823018 (风过无痕)   2015-01-03 23:14:00
sort没问题,我想问的是能不能在排序时就顺便做到我推文中程式码的效果而不用再跑回圈给值一次
作者: mp19990920 (郝渴连)   2015-01-04 12:47:00
问题是你的循环有问题啊 b[a[3]]=3 b[a[4]]=4所以 b[3]=3 被 b[3]=4 盖掉了
楼主: forb9823018 (风过无痕)   2015-01-04 15:25:00
所以我后面附注有说要把重复的数字定义好至于要怎么定义就看应用

Links booklink

Contact Us: admin [ a t ] ucptt.com