poster
2019-12-14, 20:13
我有数据(数字M x N,n> 2),该数据按第一列排序,然后按第二列排序。有谁知道一种有效的算法来将数据转换为先由第二列然后由第一列排序?显然,sortrows(data,[2,1])可以解决问题,但是我正在寻找一种可以利用输入数据的现有结构来提高速度的方法,因为M非常大。
此外,前两列中的数据是一组已知的整数(每个整数都比M小得多)。
回答:
基于MATLAB R2010b的帮助文档,函数SORTROWS (http://www.mathworks.com/help/techdoc/ref/sortrows.html)使用稳定版本的quicksort (http://en.wikipedia.org/wiki/Quicksort) 。由于稳定的排序算法“用相同的键保持记录的相对顺序” (http://en.wikipedia.org/wiki/Sorting_algorithm#Classification) ,因此您可以通过简单地相对于第二列采用已排序的数据来实现所需的目标:
data = sortrows(data,2); 此结果将保持第一列中元素的相对顺序,以使数据将首先由第二列排序,然后再由第一列排序。
更多&回答... (https://stackoverflow.com/questions/4852841)
此外,前两列中的数据是一组已知的整数(每个整数都比M小得多)。
回答:
基于MATLAB R2010b的帮助文档,函数SORTROWS (http://www.mathworks.com/help/techdoc/ref/sortrows.html)使用稳定版本的quicksort (http://en.wikipedia.org/wiki/Quicksort) 。由于稳定的排序算法“用相同的键保持记录的相对顺序” (http://en.wikipedia.org/wiki/Sorting_algorithm#Classification) ,因此您可以通过简单地相对于第二列采用已排序的数据来实现所需的目标:
data = sortrows(data,2); 此结果将保持第一列中元素的相对顺序,以使数据将首先由第二列排序,然后再由第一列排序。
更多&回答... (https://stackoverflow.com/questions/4852841)