假如我有一個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分別是在排序後的第幾個數字
是不是只能分別找
有沒有辦法在排序時就用另一個矩陣存下來?
排序後的 index 就是 1:length(x) 啊!
樓上的意思是總長度? 但我要找的是例如我要找3是在排序後的哪個位置但每次要找一次不同的數字都要整個數列搜尋一次有沒有辦法在排序時就先存起來?
a = [1,2,3,3,4,5]; iA = 1:length(a);iA = [1,2,3,4,5,6];↑第 2 個 3 在第 4 個數字
但這樣沒有對應關係要怎麼找?肉眼一看就知道但沒有建立一對一的對應關係所以還是要整個數列搜尋?
..... 為啥你會認為 a 跟 iA 並非一對一對應
因為知道'5'這個數字之後要一個一個從a[1]、a[2]...直到a[6]才找到 iA對找尋'5'這個數字並沒有幫助不管a是什麼,只要總長度一樣 iA永遠都一樣
你該不會不知道有 find 這個 function 吧!!!
那就等於每個數字都要find一次,也就是整個數列要找過一遍計算量會很大,在排序時有辦法就先排好嗎?我想到一個不算太聰明的辦法應該有更好的寫法就是排序完再跑一個迴圈1:length(a)for i=1:length(a)b[a[i]]=i; 不過要把重複數字的定義好
亂入又不看懂問題 ... 他已經 sort 過了a=[1,2,3,3,4,5];index=[4,5,1,3,6,2]; 你要的是啥?
??m大是指我嗎?我想說他要找一個複雜度低一點的演算法去找他要的東西
sort沒問題,我想問的是能不能在排序時就順便做到我推文中程式碼的效果而不用再跑回圈給值一次
問題是你的迴圈有問題啊 b[a[3]]=3 b[a[4]]=4所以 b[3]=3 被 b[3]=4 蓋掉了
所以我後面附註有說要把重複的數字定義好至於要怎麼定義就看應用