作者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/m.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